// Last edited on 2007-07-23 20:42:40 by stolfi
// Processed by remove-cam-lights

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

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

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

#declare esfera=
sphere
{
 < 0,0,0 >, 1
}

#declare cilindro=
cylinder
{
 < 0,0,0 >,
 < 0,0,1 >,
 1
}

#declare espada=
cylinder
{
 < 0,0,0 >,
 < 2,0,0 >,
 0.2
}
#declare MovMao = 90*clock;
#macro Mao()
union{
 object
 {
  esfera
  scale <0.4, 0.3, 0.2>
  texture{tinta_A}
 }
 object{
  espada
  rotate<0,MovMao,0>
  texture{tinta_B}
 }
}
#end

#macro Pe()
object
{
 esfera
 scale <0.4, 0.3, 0.2>
 texture{tinta_A}
}
#end

#macro Antebraco(modo)
union
{
 object
 {
  cilindro
  scale <0.25, 0.2, 1>
  translate -1*z
  texture{tinta_A}
 }
 object
 {
  #if(modo = 1)
   Pe()
  #else
   Mao()
  #end
  translate <0.1, 0, -1>
 }
}
#end

#macro BracoFrente(RotAnt,modo)
union
{
 object
 {
  Antebraco(modo)
  #if(RotAnt > 40)
   #declare RotAnt = 40;
  #end
  #if(RotAnt < -20)
   #declare RotAnt = -40;
  #end
  rotate (-70 + RotAnt)*y
  translate -1*z
 }
 union
 {
  object
  {
   cilindro
   scale <0.25, 0.25, 1>
   translate -1*z
   texture{tinta_A}
  }
  object
  {
   esfera
   scale 0.27
   translate -1*z
   texture{tinta_A}
  }
 }
 rotate 10*y
}
#end

#macro BracoTras(BraTra)
union
{
 union
 {
  object
  {
   BracoFrente(-30,1)
   rotate (50 + BraTra)*y

  }
  object
  {
   esfera
   scale 0.3

   texture{tinta_A}
  }

  translate <1, 0, 0>

 }
 object
 {
  cilindro
  scale <0.29, 0.29, 1>
  rotate 90*y

  texture{tinta_A}
 }
 object
 {
  esfera
  scale 0.32

  texture{tinta_A}
 }

 rotate 50*y
}
#end

#macro Cabeca(Sim, Nao)
object
{
 esfera
 scale <0.8, 0.7, 0.6>
 rotate <Nao, Sim, 0>
 translate <1.9, 0, 0.6>
 texture{tinta_A}
}
#end

#macro Corpo(AnteFreDi, AnteFreEs, AnteTraDi, AnteTraEs, BraFreDiX, BraFreDiY, BraFreEsX, BraFreEsY, BraTraDiX, BraTraDiY, BraTraEsX, BraTraEsY)
union
{
 object
 {
  esfera
  scale <1.8, 1.8, 1>
  texture{tinta_A}
 }

 union
 {
  object
  {
   BracoFrente(AnteFreDi,0)
   rotate <BraFreDiX, BraFreDiY, 0>
   translate <1.2, 1.2, -0.3>
  }
  object
  {
   esfera
   scale 0.27
   translate <1.2, 1.2, -0.3>
   texture{tinta_A}
  }
 }

 union
 {
  object
  {
   BracoFrente(AnteFreEs,0)
   rotate <BraFreEsX, BraFreEsY, 0>
   translate <1.2, -1.2, -0.3>
  }
  object
  {
   esfera
   scale 0.27
   translate <1.2, -1.2, -0.3>
   texture{tinta_A}
  }
 }

 union
 {
  object
  {
   BracoTras(AnteTraEs)
   rotate <BraTraEsX, BraTraEsY, 0>
   translate <-0.6, 1.7, -0.3>
  }
  object
  {
   BracoTras(AnteTraDi)
   rotate <BraTraDiX, BraTraDiY>
   translate <-0.6, -1.7, -0.3>
  }
 }

}
#end

#macro Tudo(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
union
{
 object
 {
  Corpo(a,b,c,d,e,f,g,h,i,j,k,l)
 }
 object
 {
  Cabeca(m,n)
 }
}
#end

#declare a = 0;
#declare b = 0;
#declare c = 0;
#declare d = 0;
#declare e = 0;
#declare f = 0;
#declare g = 0;
#declare h = 0;
#declare i = 0;
#declare j = 0;
#declare k = 0;
#declare l = 0;
#declare m = 0;
#declare n = 0;

#declare acaoRotateZ = 90 * clock;
#declare acaoRotateY = clock*(-60);
#declare acaoABTraseiroDireito = clock*(-180);
#declare acaoBTraseiroDireito = clock*90;
#declare acaoBTraseiroEsquerdo = clock*60;
#declare acaoBFrenteDireito = clock*90;
#declare acaoBFrenteEsquerdo = clock*(-30);
#declare acaoOmbroFrenteEsquerdo = clock*(-90);
#declare acaoCabecaSim = clock*(90);
object
{
 Tudo(acaoBFrenteDireito,b,acaoABTraseiroDireito,acaoABTraseiroDireito,e,f,acaoOmbroFrenteEsquerdo,h,i,acaoBTraseiroDireito,k,acaoBTraseiroEsquerdo,acaoCabecaSim,n)
 rotate <0, acaoRotateY, acaoRotateZ>
}

// Original camera parameters:
// #local cam_ctr = <0,0,0>
// #local cam_vec = vrotate(<5.00,7.00,0.00>,20*z)
// #local cam_sky = z

#include "camlight.inc"
camlight(<0,1,0>,<10,10,10>,12.0,z,1.0)