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

#include "metals.inc"

background{ color rgb < 1.0, 1.0, 1.0 > }

#declare tx_plastico =
  texture{
    pigment{ color rgb < 0.50, 0.50, 0.50 > }
    finish{ diffuse 0.8 ambient 0.1 specular 5.8 roughness 0.1 }
  }

#declare tx_vidro =
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.1 }
  }

#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.10, 0.42, 0.60 >, color rgb < 1.00, 0.97, 0.90 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

#declare NQ=6;

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

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

#declare angAntBraE= array[NQ];
#declare angAntBraE[0]=90;
#declare angAntBraE[1]=30;
#declare angAntBraE[2]=150;
#declare angAntBraE[3]=150;
#declare angAntBraE[4]=90;
#declare angAntBraE[5]=90;

#declare angAntBraD= array[NQ];
#declare angAntBraD[0]=-30;
#declare angAntBraD[1]=-90;
#declare angAntBraD[2]=-90;
#declare angAntBraD[3]=-150;
#declare angAntBraD[4]=-150;
#declare angAntBraD[5]=-30;

#declare angBraD= array[NQ];
#declare angBraD[0]=-150;
#declare angBraD[1]=-90;
#declare angBraD[2]=-90;
#declare angBraD[3]=-150;
#declare angBraD[4]=-150;
#declare angBraD[5]=-150;

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

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

#declare angPerD= array[NQ];
#declare angPerD[0]=0;
#declare angPerD[1]=0;
#declare angPerD[2]=0;
#declare angPerD[3]=0;
#declare angPerD[4]=-50;
#declare angPerD[5]=0;

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

#declare angAntPerD= array[NQ];
#declare angAntPerD[0]=0;
#declare angAntPerD[1]=0;
#declare angAntPerD[2]=0;
#declare angAntPerD[3]=0;
#declare angAntPerD[4]=-50;
#declare angAntPerD[5]=0;

#declare tempo= array[NQ];
#declare tempo[0]= 0.00;
#declare tempo[1]= 0.20;
#declare tempo[2]= 0.40;
#declare tempo[3]= 0.60;
#declare tempo[4]= 0.80;
#declare tempo[5]= 1.00;

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

        (rr*v0 + ss*v1)
#end

#macro quadro_anterior(fase)
        #local i= 0;
        #while(i < NQ-1 )
                #if((tempo[i] <= fase) & ((i = NQ) | (tempo[i+1] >= fase)))
                        #local resp= i;
                #end
                #local i= i+1;
        #end
        resp
#end

#macro mcpt()
        #declare cabeca =
  cylinder{
    < 0, 0, 5.0 >,
    < 0, 0, +7.0 >,
    1.0
                texture { pigment {color rgb <0.64, 0.16, 0.16> }}
  }

#declare olho =
        sphere { <0.8,0,6.7> ,
                                                0.13
        }

#declare nariz =
        sphere {
                <0.9,0,6.0>,
                0.2
        }

        #declare tronco =
        cylinder{
    < 0, 0, 0.0 >,
    < 0, 0, +4.0 >,
    2.0
                texture { pigment {color rgb <0.64, 0.16, 0.16> } }
  }

        #declare pesc =
        cylinder{
    < 0, 0, 4.0 >,
    < 0, 0, 5.0 >,
    0.4
                texture { pigment {color rgb <0.64, 0.16, 0.16> } }
  }

        union {
                object { cabeca  }
                object { tronco }
                object { pesc  }
                object { nariz }
                object { olho translate <0, -0.5, 0>}
                object { olho translate <0, 0.5, 0>}
        }
#end

#macro mpeh(n)
#declare peh =
        box {
                <-0.9, -0.8, -0.02>,
                < 0.9,  0.8,  0.02>
                texture { pigment {color rgb <0.64, 0.16, 0.16> }}
        }
        object { peh rotate <n, 0, 0>}
#end

#macro anteperna(aa, ap)
#declare c1 =
        cylinder{
                                < 0, 0,  0.0 >,
                                < 0, 0, -3.0>,
                                0.25
        }
        union {
                object { c1 rotate <aa, 0, 0> }
                object {
                                                 mpeh(ap) rotate <-aa, 0, 0>
                                                                                        translate < 0, 0, -3>
                                                                                        rotate <aa, 0, 0>
          }
        }

#end

#macro perna(ap, aap, apeh)
#declare c1 =
        cylinder{
                                < 0, 0, 0 >,
                                < 0, 0, -4.0>,
                                0.3
                                                texture { pigment {color rgb <0.64, 0.16, 0.16> }}

        }
        union {
                object { c1 rotate <ap, 0, 0> }
                object { anteperna(aap, apeh) rotate <-ap, 0, 0>
                                                                                                                                        translate <0, 0, -4>
                                                                                                                                        rotate <ap, 0, 0>

                                        }
        }

#end

#macro antebrac(n)
#declare c1 =
        cylinder{
                                < 0, 0, 0 >,
                                < 0, 0, -1.5>,
                                0.25
        }

#declare mao =
  sphere{ < 0, 0, -2.0 >,
                                        0.5
                            texture{ pigment { color rgb <0,1,0> } }

        }

        union {
                object { c1 rotate <n,0,0> }
                object { mao  rotate <n, 0, 0>  }
        }
#end

#macro braco(ab, aa)
#declare cil =
        cylinder{
                                < 0, 0, -1.5 >,
                                < 0, 0, 0 >,
                                0.5
                                                texture { pigment {color rgb <0.74, 0.26, 0.26> } }
        }
        union {
                object { antebrac(aa) rotate <-ab,0,0>
                                                                                                        translate <0, 0, -1.5>
                                                                                                        rotate <ab, 0, 0>
                }
                object { cil rotate <ab, 0, 0> }
        }

#end

#declare caixa =
  box{ < -2.00, +2.00, -1.00 >,
       < +2.00, -2.00, +1.00 >
                         texture {tx_vidro}
        }

#declare chao =
  box{ <-20,-20,-1>, <+20,+20,0> }

#include "eixos.inc"

#macro boneco(bracD, antebracD, pernaD, antepernaD, pehD, bracE, antebracE, pernaE, antepernaE, pehE)
union {
  object{ eixos(3.00) }

        object { mcpt() }
        object { braco(bracE, antebracE)  translate <0, 2.1, 3.7> }
        object { braco(bracD, antebracD) translate <0, -2.1, 3.7> }
        object { perna(pernaE,antepernaE ,  pehE) translate <0, 1.8, 0>}
        object { perna(pernaD, antepernaD, pehD) translate <0, -1.8, 0>}
}
#end

#macro boneco_dancando(fase)
        #local ant= quadro_anterior(fase);
        #local fa= fase;

  #declare braD = interpola(tempo[ant], angBraD[ant], tempo[ant+1], angBraD[ant+1], fa);
        #declare antBraD = interpola(tempo[ant], angAntBraD[ant], tempo[ant+1], angAntBraD[ant+1], fa);
        #declare perD = interpola(tempo[ant], angPerD[ant], tempo[ant+1], angPerD[ant+1], fa);
        #declare antPerD = interpola(tempo[ant], angAntPerD[ant], tempo[ant+1], angAntPerD[ant+1], fa);
        #declare pehD = interpola(tempo[ant], angPehD[ant], tempo[ant+1], angPehD[ant+1], fa);
        #declare braE = interpola(tempo[ant], angBraE[ant], tempo[ant+1], angBraE[ant+1], fa);
        #declare antBraE = interpola(tempo[ant], angAntBraE[ant], tempo[ant+1], angAntBraE[ant+1], fa);
        #declare perE = interpola(tempo[ant], angPerE[ant], tempo[ant+1], angPerE[ant+1], fa);
        #declare antPerE = interpola(tempo[ant], angAntPerE[ant], tempo[ant+1], angAntPerE[ant+1], fa);
        #declare pehE = interpola(tempo[ant], angPehE[ant], tempo[ant+1], angPehE[ant+1], fa);

        object { boneco(braD, antBraD, perD, antPerD, pehD, braE, antBraE, perE, antPerE, pehE) translate <0, 0, 1>}

#end

union {

        object{ chao  translate < 0,0,-8 > texture{ tx_xadrez } }
        boneco_dancando(clock)

}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 1.00 >;
#declare raio_cena = 14.0;
#declare dir_camera = < 34.00, 10.00, 14.00 >;
#declare dist_camera = 16.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)