/*
 * Script: scena.c
 *
 * Composizione della scena e settaggio dei parametri di materiale e di texture 
 * mapping.
 *
 * 
 */



#include "descriptor/descriptor.h"

int main(void)
{
        
        ITEM    a, piano, piano_attr, muro, muro1, muro_attr, cielo, cielo_attr,
                cornice, cornice1;
        
        ITEM    tavolo, tav_base1, tav_base2, tav_cil1, tav_cil2, tav_cil3, tav_cil4,
                tav_disco1, tav_disco2;

        ITEM    sedia, sedia_cuscino, sedia_strutt1, sedia_strutt2, sedia_trave_centrale,
                sedia_trave_sotto, sedia_tappo_sotto1, sedia_tappo_sotto2, 
                sedia_tappo_sopra1, sedia_tappo_sopra2;
                
        ITEM    p_piedi, pp_strutt1, pp_strutt2, pp_cuscino, pp_trave1, pp_trave2;
        
        ITEM    cocktail, cock_bicchiere, cock_cannuccia, cock_liquido, 
                plast_cannuccia;

        ITEM    om, om_tela, om_mazza, om_pezzo_d, om_pezzo_m, om_pezzo_u, 
                om_punta, om_cappuccio, om_c1, om_c2, om_c3, om_c4, om_c5, 
                om_c6, om_c7, om_base, om_sicura_fill, om_sicura_l1, om_sicura_l2,
                om_asta, om_a1, om_a2, om_a3, om_a4, om_a5, om_a6, om_a7, 
                om_asta_angolo, om_aa1, om_aa2, om_aa3, om_aa4, om_aa5, om_aa6, 
                om_aa7, om_plast;

        ITEM    marmo, legno, stoffa, metallo, vetro, liquido, obj_legno;

        ITEM    scena;
        
        /*
         * Settaggio parametri globali
         */
                
        set_background(0.447,0.47,0.588,TRUE);
        set_ambient_light(1,1,1,1.5);
        create_point_light(-6,-72,100,1,1,1,2.0,150,"luce");
        
        /*
         * Attributi globali
         */
        
        legno = create_attribute("legno");
        set_color(legno,0.603,0.411,0.317,0.5,0.5);
        set_reflectivity(legno,0.050,2);

        marmo = create_attribute("marmo");
        set_color(marmo,0,0,0,0.5,0.5);
        set_reflectivity(marmo,0.070,2);

        stoffa = create_attribute("stoffa");
        set_color(stoffa,0.411,0.545,0.411,0.5,0.5);
        set_reflectivity(stoffa,0,2);
        
        vetro = create_attribute("vetro");
        set_color(vetro,1,1,1,0.5,0.5);
        set_reflectivity(vetro,0,1);
        set_transparency(vetro,0.87,0.68,1,1.660);
        
        metallo = create_attribute("metallo");
        set_color(metallo,0.482,0.482,0.450,0.5,0.5);
        set_reflectivity(metallo,0.280,2);

        /*
         * Sedia
         */
        
        sedia_strutt1 = read_nurbs("s_strutt1.db");
        
        sedia_strutt2 = read_nurbs("s_strutt2.db");
        
        sedia_trave_centrale = read_nurbs("s_trave_centrale.db");
        
        sedia_trave_sotto = read_nurbs("s_trave_sotto.db");
        
        sedia_tappo_sotto1 = read_nurbs("s_tappo_sotto1.db");
        
        sedia_tappo_sotto2 = read_nurbs("s_tappo_sotto2.db");
        
        sedia_tappo_sopra1 = read_nurbs("s_tappo_sopra1.db");
        
        sedia_tappo_sopra2 = read_nurbs("s_tappo_sopra2.db");
        
        sedia_cuscino = read_nurbs("s_cuscino.db");
        set_translate(sedia_cuscino,0.134,0.0,-0.255);
        set_y_rotate(sedia_cuscino,90,1);
        set_x_rotate(sedia_cuscino,90,1);
        set_projection_texture(sedia_cuscino,stoffa,"textures/rafia.hr",FALSE,FALSE,0.8,0.9);
        set_x_rotate(sedia_cuscino,-90,1);
        set_y_rotate(sedia_cuscino,-90,1);
        set_translate(sedia_cuscino,-0.134,0.0,0.255);
        
        sedia=create_list(sedia_cuscino,"sedia");
        sedia=insert_in_list(sedia,sedia_strutt1);
        sedia=insert_in_list(sedia,sedia_strutt2);
        sedia=insert_in_list(sedia,sedia_trave_centrale);
        sedia=insert_in_list(sedia,sedia_trave_sotto);
        sedia=insert_in_list(sedia,sedia_tappo_sotto1);
        sedia=insert_in_list(sedia,sedia_tappo_sotto2);
        sedia=insert_in_list(sedia,sedia_tappo_sopra1);
        sedia=insert_in_list(sedia,sedia_tappo_sopra2);

        /*
         * Poggiapiedi
         */

        pp_cuscino = read_nurbs("pp_cuscino.db");
        set_translate(pp_cuscino,-1.3,-0.031,0.217);
        set_y_rotate(pp_cuscino,90,1);
        set_x_rotate(pp_cuscino,90,1);
        set_projection_texture(pp_cuscino,stoffa,"textures/rafia.hr",FALSE,FALSE,0.8,0.9);
        set_x_rotate(pp_cuscino,-90,1);
        set_y_rotate(pp_cuscino,-90,1);
        set_translate(pp_cuscino,1.3,0.031,-0.217);


        pp_strutt1 = read_nurbs("pp_strutt1.db");

        pp_strutt2 = read_nurbs("pp_strutt2.db");

        pp_trave1 = read_nurbs("pp_trave1.db");

        pp_trave2 = read_nurbs("pp_trave2.db");

        p_piedi=create_list(pp_cuscino,"poggiapiedi");
        p_piedi=insert_in_list(p_piedi,pp_strutt1);
        p_piedi=insert_in_list(p_piedi,pp_strutt2);
        p_piedi=insert_in_list(p_piedi,pp_trave1);
        p_piedi=insert_in_list(p_piedi,pp_trave2);

        set_translate(p_piedi,0,-0.42,0);

        /*
         * Bicchiere
         */

        liquido = create_attribute("liquido");
        set_color(liquido,0,0,1,0.5,0.5);
        set_reflectivity(liquido,0,1);
        set_transparency(liquido,0.87,0.68,1,1.330);
        
        plast_cannuccia = create_attribute("plastica_cannuccia");
        set_color(plast_cannuccia,1,0,0,0.5,0.5);
        set_reflectivity(plast_cannuccia,0.2,2);
        

        
        cock_bicchiere = read_nurbs("cock_bicchiere.db");
        set_attribute(cock_bicchiere,vetro);

        cock_cannuccia = read_nurbs("cock_cannuccia.db");
        set_attribute(cock_cannuccia,plast_cannuccia);

        cock_liquido = read_nurbs("cock_liquido.db");
        set_attribute(cock_liquido,liquido);

        cocktail = create_list(cock_bicchiere,"cocktail");
        cocktail = insert_in_list(cocktail,cock_cannuccia);
        cocktail = insert_in_list(cocktail,cock_liquido);

        /*
         * Ambiente
         */
        
        piano_attr = create_attribute("cotto");
        set_color(piano_attr,0,0,0,0.270,0.270);
        set_reflectivity(piano_attr,0,2);
          
        muro_attr = create_attribute("mattoni");
        set_color(muro_attr,0,0,0,0.270,0.270);
        set_reflectivity(muro_attr,0,2);

        cielo_attr = create_attribute("cielo");
        set_color(cielo_attr,0,0,0,0.270,0.270);
        set_reflectivity(cielo_attr,0,0);
        
        
        
        piano = read_nurbs("a_piano.db");
        set_domain_texture(piano,piano_attr,"textures/cotto.hr",
                             0.0,0.08,0.0,0.08,TRUE,1,1);
                
        muro = read_nurbs("a_muro1.db");
        set_domain_texture(muro,muro_attr,"textures/muro.hr",
                             0.05,0,0,0.009,TRUE,1,1);
 
        muro1=read_nurbs("a_muro2.db");
        set_domain_texture(muro1,muro_attr,"textures/muro.hr",
                             0.05,0,0,0.009,TRUE,1,1);
        
        cielo = read_nurbs("cielo_sfera.db");
        set_scale(cielo,300,300,300);
        set_domain_texture(cielo,cielo_attr,"textures/cielo.hr",
                             0.15,0,0,0.15,TRUE,1,1);

        
        a = create_list(piano,"ambiente");
        a = insert_in_list(a,muro);
        a = insert_in_list(a,muro1);
        a = insert_in_list(a,cielo);

        /*
         * Ombrellone
         */

        om_plast = create_attribute("plastica_ombrellone");
        set_color(om_plast,1,0.800,0,0.460,0.460);
        set_reflectivity(om_plast,0.050,2);
        
        
        
        om_tela = read_nurbs("om_tela.db");
        set_translate(om_tela,0.026,0.0,-2.924);
        set_scale(om_tela,1/3.8,1/3.8,1/3.8);
        set_y_rotate(om_tela,90,1);
        set_projection_texture(om_tela,stoffa,"textures/tessuto.hr",FALSE,FALSE,1,0.8);
        set_y_rotate(om_tela,-90,1);
        set_scale(om_tela,3.8,3.8,3.8);
        set_translate(om_tela,-0.026,0.0,2.924);
        
        om_mazza = read_nurbs("om_mazza.db");
        
        om_pezzo_u = read_nurbs("om_pezzo_sopra.db");

        om_pezzo_m = read_nurbs("om_pezzo_mezzo.db");

        om_pezzo_d = read_nurbs("om_pezzo_sotto.db");

        om_punta = read_nurbs("om_punta.db");
        set_attribute(om_punta,om_plast);

        om_cappuccio = read_nurbs("om_cappuccio.db");
        set_attribute(om_cappuccio,om_plast);

        om_c1 = create_copy(om_cappuccio,"om_cappuccio1");
        set_attribute(om_c1,om_plast);
        
        om_c2 = create_copy(om_cappuccio,"om_cappuccio2");
        set_attribute(om_c2,om_plast);
        
        om_c3 = create_copy(om_cappuccio,"om_cappuccio3");
        set_attribute(om_c3,om_plast);
        
        om_c4 = create_copy(om_cappuccio,"om_cappuccio4");
        set_attribute(om_c4,om_plast);
        
        om_c5 = create_copy(om_cappuccio,"om_cappuccio5");
        set_attribute(om_c5,om_plast);
        
        om_c6 = create_copy(om_cappuccio,"om_cappuccio6");
        set_attribute(om_c6,om_plast);
        
        om_c7 = create_copy(om_cappuccio,"om_cappuccio7");
        set_attribute(om_c7,om_plast);

        set_z_rotate(om_c1,45,1);
        set_z_rotate(om_c2,90,1);
        set_z_rotate(om_c3,135,1);
        set_z_rotate(om_c4,180,1);
        set_z_rotate(om_c5,225,1);
        set_z_rotate(om_c6,270,1);
        set_z_rotate(om_c7,315,1);

        om_asta = read_nurbs("om_asta.db");
        
        om_a1 = create_copy(om_asta,"om_asta1");
        
        om_a2 = create_copy(om_asta,"om_asta2");
        
        om_a3 = create_copy(om_asta,"om_asta3");
        
        om_a4 = create_copy(om_asta,"om_asta4");
        
        om_a5 = create_copy(om_asta,"om_asta5");
        
        om_a6 = create_copy(om_asta,"om_asta6");
        
        om_a7 = create_copy(om_asta,"om_asta7");

        set_z_rotate(om_a1,45,1);
        set_z_rotate(om_a2,90,1);
        set_z_rotate(om_a3,135,1);
        set_z_rotate(om_a4,180,1);
        set_z_rotate(om_a5,225,1);
        set_z_rotate(om_a6,270,1);
        set_z_rotate(om_a7,315,1);


        om_asta_angolo = read_nurbs("om_asta_angolo.db");
        
        om_aa1 = create_copy(om_asta_angolo,"om_asta_angolo1");
        
        om_aa2 = create_copy(om_asta_angolo,"om_asta_angolo2");
        
        om_aa3 = create_copy(om_asta_angolo,"om_asta_angolo3");
        
        om_aa4 = create_copy(om_asta_angolo,"om_asta_angolo4");
        
        om_aa5 = create_copy(om_asta_angolo,"om_asta_angolo5");
        
        om_aa6 = create_copy(om_asta_angolo,"om_asta_angolo6");
        
        om_aa7 = create_copy(om_asta_angolo,"om_asta_angolo7");

        set_z_rotate(om_aa1,45,1);
        set_z_rotate(om_aa2,90,1);
        set_z_rotate(om_aa3,135,1);
        set_z_rotate(om_aa4,180,1);
        set_z_rotate(om_aa5,225,1);
        set_z_rotate(om_aa6,270,1);
        set_z_rotate(om_aa7,315,1);

        om_base= read_nurbs("om_base.db");
        set_attribute(om_base,om_plast);

        om = create_list(om_tela,"ombrellone");
        om = insert_in_list(om,om_mazza);
        om = insert_in_list(om,om_pezzo_d);
        om = insert_in_list(om,om_pezzo_m);
        om = insert_in_list(om,om_pezzo_u);
        om = insert_in_list(om,om_punta);
        om = insert_in_list(om,om_cappuccio);
        om = insert_in_list(om,om_c1);
        om = insert_in_list(om,om_c2);
        om = insert_in_list(om,om_c3);
        om = insert_in_list(om,om_c4);
        om = insert_in_list(om,om_c5);
        om = insert_in_list(om,om_c6);
        om = insert_in_list(om,om_c7);
        om = insert_in_list(om,om_asta);
        om = insert_in_list(om,om_a1);
        om = insert_in_list(om,om_a2);
        om = insert_in_list(om,om_a3);
        om = insert_in_list(om,om_a4);
        om = insert_in_list(om,om_a5);
        om = insert_in_list(om,om_a6);
        om = insert_in_list(om,om_a7);
        om = insert_in_list(om,om_asta_angolo);
        om = insert_in_list(om,om_aa1);
        om = insert_in_list(om,om_aa2);
        om = insert_in_list(om,om_aa3);
        om = insert_in_list(om,om_aa4);
        om = insert_in_list(om,om_aa5);
        om = insert_in_list(om,om_aa6);
        om = insert_in_list(om,om_aa7);
        om = insert_in_list(om,om_base);

        set_translate(om,0,-1.3,-0.8);

        /*
         * Tavolo
         */
        
        tav_base1 = read_nurbs("tav_base1.db");
        tav_base2 = read_nurbs("tav_base2.db");

        tav_cil1 = read_nurbs("tav_cil1.db");
        set_attribute(tav_cil1,metallo);
        
        tav_cil2 = read_nurbs("tav_cil2.db");
        set_attribute(tav_cil2,metallo);

        tav_cil3 = read_nurbs("tav_cil3.db");
        set_attribute(tav_cil3,metallo);

        tav_cil4 = read_nurbs("tav_cil4.db");
        set_attribute(tav_cil4,metallo);
        
        tav_disco1 = read_nurbs("tav_disco1.db");
        set_attribute(tav_disco1,vetro);

        tav_disco2 = read_nurbs("tav_disco2.db");
        set_translate(tav_disco2,0,-1.5,0.012);
        set_y_rotate(tav_disco2,90,1);
        set_scale(tav_disco2,1.0/0.7,1.0/0.7,1.0/0.7);
        set_projection_texture(tav_disco2,marmo,"textures/marmo.hr",FALSE,FALSE,0.6,0.8);
        set_scale(tav_disco2,0.7,0.7,0.7);
        set_y_rotate(tav_disco2,-90,1);
        set_translate(tav_disco2,0,1.5,-0.012);

        tavolo = create_list(tav_base1,"tavolo");
        tavolo = insert_in_list(tavolo,tav_base2);
        tavolo = insert_in_list(tavolo,tav_disco1);
        tavolo = insert_in_list(tavolo,tav_disco2);
        tavolo = insert_in_list(tavolo,tav_cil1);
        tavolo = insert_in_list(tavolo,tav_cil2);
        tavolo = insert_in_list(tavolo,tav_cil3);
        tavolo = insert_in_list(tavolo,tav_cil4);
        
        
        /*
         * Creazione lista oggetti di legno
         */
        
        obj_legno = create_list(sedia_strutt1,"obj_legno");
        obj_legno = insert_in_list(obj_legno,sedia_strutt2);
        obj_legno = insert_in_list(obj_legno,sedia_trave_centrale);
        obj_legno = insert_in_list(obj_legno,sedia_trave_sotto);
        obj_legno = insert_in_list(obj_legno,sedia_tappo_sotto1);
        obj_legno = insert_in_list(obj_legno,sedia_tappo_sotto2);
        obj_legno = insert_in_list(obj_legno,sedia_tappo_sopra1);
        obj_legno = insert_in_list(obj_legno,sedia_tappo_sopra2);
        obj_legno = insert_in_list(obj_legno,tav_base1);
        obj_legno = insert_in_list(obj_legno,tav_base2);
        obj_legno = insert_in_list(obj_legno,pp_strutt1);
        obj_legno = insert_in_list(obj_legno,pp_strutt2);
        obj_legno = insert_in_list(obj_legno,pp_trave1);
        obj_legno = insert_in_list(obj_legno,pp_trave2);
        obj_legno = insert_in_list(obj_legno,om_mazza);
        obj_legno = insert_in_list(obj_legno,om_pezzo_d);
        obj_legno = insert_in_list(obj_legno,om_pezzo_m);
        obj_legno = insert_in_list(obj_legno,om_pezzo_u);
        obj_legno = insert_in_list(obj_legno,om_asta);
        obj_legno = insert_in_list(obj_legno,om_a1);
        obj_legno = insert_in_list(obj_legno,om_a2);
        obj_legno = insert_in_list(obj_legno,om_a3);
        obj_legno = insert_in_list(obj_legno,om_a4);
        obj_legno = insert_in_list(obj_legno,om_a5);
        obj_legno = insert_in_list(obj_legno,om_a6);
        obj_legno = insert_in_list(obj_legno,om_a7);
        obj_legno = insert_in_list(obj_legno,om_asta_angolo);
        obj_legno = insert_in_list(obj_legno,om_aa1);
        obj_legno = insert_in_list(obj_legno,om_aa2);
        obj_legno = insert_in_list(obj_legno,om_aa3);
        obj_legno = insert_in_list(obj_legno,om_aa4);
        obj_legno = insert_in_list(obj_legno,om_aa5);
        obj_legno = insert_in_list(obj_legno,om_aa6);
        obj_legno = insert_in_list(obj_legno,om_aa7);
        
        set_domain_texture(obj_legno,legno,"textures/legno_chiaro.hr",0,1,1,0,TRUE,0.8,0.9);

        /*
         * Composizione scena finale
         */

        scena = create_list(a,"scena");
        scena = insert_in_list(scena,tavolo);
        scena = insert_in_list(scena,sedia);
        scena = insert_in_list(scena,p_piedi);
        scena = insert_in_list(scena,cocktail);
        scena = insert_in_list(scena,om);
        save_scene("scena.md","scena",scena);
        return(0);
}