// Last edited on DATE TIME by USER
// Processed by remove-cam-lights

background{ color rgb < 0.75, 0.80, 0.85 > }

#include "eixos.inc"
#include "textures.inc"

#declare anteb_l = 0.8;
#declare tam_braco = 0.1;
#declare braco_l = 1.0;
#declare tronco_h = 1.5;
#declare tronco_l = 0.3;
#declare tam_pesc = 0.1;
#declare raio_pesc = 0.1;
#declare cabeca_r = 0.3;
#declare antep_l = 0.8;
#declare perna_r = 0.1;
#declare perna_l = 1.0;
#declare pe_l = 0.5;
#declare pe_w = 0.1;
#declare pe_h = 0.1;

#declare NQ = 6; //Numero de quadros

#declare BD = array[NQ];
#declare BD[0] = 90;
#declare BD[1] = 90;
#declare BD[2] = 0;
#declare BD[3] = 90;
#declare BD[4] = 90;
#declare BD[5] = 90;

#declare BE = array[NQ];
#declare BE[0] = 90;
#declare BE[1] = 90;
#declare BE[2] = 0;
#declare BE[3] = 90;
#declare BE[4] = 90;
#declare BE[5] = 90;

#declare PD = array[NQ];
#declare PD[0] = 0;
#declare PD[1] = 0;
#declare PD[2] = 0;
#declare PD[3] = 45;
#declare PD[4] = 0;
#declare PD[5] = 0;

#declare PE = array[NQ];
#declare PE[0] = 45;
#declare PE[1] = 0;
#declare PE[2] = 0;
#declare PE[3] = 0;
#declare PE[4] = 0;
#declare PE[5] = 45;

#declare fq = array[NQ];
#declare fq[0] = 0.0;
#declare fq[1] = 0.2;
#declare fq[2] = 0.4;
#declare fq[3] = 0.6;
#declare fq[4] = 0.8;
#declare fq[5] = 1.0;

#declare tx_plastico =
  texture{
    pigment{ color rgb < 0.10, 0.80, 1.00 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}

#declare tx_bota =
  texture{
    pigment{ color rgb < 0, 0, 0 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}

#declare braco =

        cylinder{
                <0,0,0>,
                <0,0,-braco_l>,
                tam_braco
                texture{tx_plastico}
        }

#declare anteb =
        cylinder{
                <0,0,0>,
                <0,0,-anteb_l>,
                tam_braco
                texture{tx_plastico}
        }

#declare mao =
        sphere{
                <0,0,0>,1.5*tam_braco
                texture{tx_plastico}
        }

#declare tronco =

        cylinder{
                <0,0,0>,
                <0,0, tronco_h>, tronco_l
                texture{tx_plastico}
        }

#declare cabeca =
        union{
          cylinder{
                  <0,0,0>,
                  <0,0,tam_pesc>,
                  raio_pesc
                  texture{tx_plastico}
          }
          sphere{
                  <0,0,cabeca_r+tam_pesc>,cabeca_r
                  texture{tx_plastico}
          }
        }
#declare perna =
        cone{
                <0,0,0>, perna_r,
                <0,0,-perna_l>, perna_r
                texture{tx_plastico}
        }

#declare antep =
        cone{
                <0,0,0>, perna_r,
                <0,0,-antep_l>, perna_r
                texture {tx_bota}
        }

#declare pe =
        box{
                <0,-pe_w,0>,
                <pe_l,+pe_w,pe_h>
                texture {tx_bota}
        }

#macro antebraco(n)
        union{
                object{anteb}
                object{mao translate<0,0,-n>}
        }
#end

#macro bracoanteb(b2)
        union{
                object{braco}
                object{antebraco(anteb_l) rotate (-b2)*y translate<0,0,-braco_l> }
        }
#end

#macro anteperna(p3)
        union{
                object{antep}

        }
#end

#macro pernaantep(p2,p3)
        union{
                object{perna}
                object{anteperna(p3) rotate(-p2)*y translate<0,0,-perna_l> }
        }
#end

#macro troncocabeca(be1,bd1,be2,bd2, pe1,pd1,pe2,pd2,pe3,pd3)
        union{
                object{tronco}
                object{cabeca translate<0,0,tronco_h>}
                object{bracoanteb(be2) rotate (-be1)*y translate<0,tronco_l,tronco_h>}
                object{bracoanteb(bd2) rotate (-bd1)*y translate<0,-tronco_l,tronco_h>}
                object{pernaantep(pe2,pe3) rotate (-pe1)*y translate<0,tronco_l,0>}
                object{pernaantep(pd2,pd3) rotate (-pd1)*y translate<0,-tronco_l,0>}

        }
#end

#macro busca (fase)

  #local i = 0;
  #while (fq[i] < fase)
    #local i = i + 1;
  #end

  (i-1)

#end

#macro interpola (f0, v0, f1, v1, f)
  #local ss = (f-f0)/(f1-f0);
  #local rr = 1-ss;
  (rr*v0+ss*v1);
#end

#macro boneco_dancando (fase)
  #local i = busca(fase);
  #local bd = interpola (fq[i], BD[i], fq[i+1],BD[i+1], fase);
  #local be = interpola (fq[i], BE[i], fq[i+1],BE[i+1], fase);
  #local pd = interpola (fq[i], PD[i], fq[i+1],PD[i+1], fase);
  #local pe = interpola (fq[i], PE[i], fq[i+1],PE[i+1], fase);

  object{troncocabeca(be,bd,0,0,pe,pd,0,0,0,0)}

#end

union{
  object{ eixos(6.00) }

  object{boneco_dancando(clock)}

}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 1.00 >;
#declare raio_cena = 7.0;
#declare dir_camera = < 10.00, 10.00, 5.00 >;
#declare dist_camera = 30.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)