// Last edited on 2003-05-29 19:24:12 by stolfi

#include "colors.inc"

 background{ color White }
  camera {
    location 0.12*<90,0,-60>
    right x   up y
    look_at <0,-0.5,-2.5>
  }
  light_source { 100*<10, 20, -10> color 1.2*White }
  light_source { 100*<15, 9, 5> color 0.8*White }

#declare tinta_A = 
  texture {
    pigment { color rgb < 1.00, 0.00, 0.00 > }
    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 cabeca =
  sphere {
    < 0.00, 2.90, 0.00 >, 1.00 
    texture { tinta_B }
  }

#declare olho =
  sphere {
    < +0.25, 3, -1.00 >, 0.1 
    texture { tinta_A }
  }

#declare nariz =
  sphere {
    < 0, 2.5, -1.00 >, 0.3 
    texture { tinta_A }
  }

#declare corpo =
  sphere {
    < 0.00, 0.00, 0.00 >, 1.30 scale < 0.00, 1.50, 0.00 > 
    texture { tinta_B }
  }
  
#declare braco = 
    cylinder {
      < 0.0, 0.80, 0.00 >
      < -1.80, 0.30, 0.00 >,
      0.25
      translate <-0.5, 0, 0>
      texture { tinta_B }
    }

#declare orelha =
  sphere {
    < 0, 2.9, 0 >, 0.4
    translate <-1, 0, 0> 
    texture { tinta_B }
  }
    
#declare rabo = 
  cylinder {
      < 0, -1.3, 0.0 >
      < -1.80, 0.60, 5.00 >,
      0.25
      texture { tinta_B }
    }    

#declare coxa =
  sphere {
    < 0, -1.1, 0 >, 0.5
    scale <0, 2, 0> 
    rotate <0, 0, 30>
    texture { tinta_B }
  }

#declare canela =
  sphere {
    < 0, -1.8, 0 >, 0.5
    scale <0, 1.5, 0> 
    texture { tinta_B }
  } 

#declare pe =
  box {
    <1, -3, 0>,  
    <2, -3.9,  -1.5>   
    texture { tinta_A }
  }

/////////// Clock 

#if (clock < 0.25) 
// levanta perna direita (30 graus)

  //perna direita  
  #declare cpd = clock*100*30/25; // angulo entre corpo e perna direita
  #declare pbd = 0; // angulo entre perna direita e bota direita
  //perna esquerda
  #declare cpe = 0; // angulo entre corpo e perna esquerda
  #declare pbe = 0; // angulo entre perna esquerda e bota esquerda
  //macaco
  #declare angulomacaco = 0;
  #declare translmacaco = 0;
#else

  #if (clock < 0.5) 
  // dobra joelho direito (-30 graus)
  
    //perna direita
    #declare cpd = 30; // angulo entre corpo e perna direita
    #declare pbd = (-1)*(clock-0.25)*100*30/25; // angulo entre perna direita e bota direita
    //perna esquerda
    #declare cpe = 0; // angulo entre corpo e perna esquerda
    #declare pbe = 0; // angulo entre perna esquerda e bota esquerda
    //macaco
    #declare angulomacaco = 0;
    #declare translmacaco = 0;
  #else

    #if (clock < 0.75) 
    // macaco roda -10 graus; joelho direito volta 30 graus; joelho esquerdo dobra -10 graus
      
      //perna direita
      #declare cpd = 30; // angulo entre corpo e perna direita
      #declare pbd = -30 + (clock-0.5)*100*30/25; // angulo entre perna direita e bota direita
      //perna esquerda
      #declare cpe = 0; // angulo entre corpo e perna esquerda
      #declare pbe = (-1)*(clock-0.5)*100*10/25; // angulo entre perna esquerda e bota esquerda
      //macaco
      #declare angulomacaco = (-1)*(clock-0.5)*100*10/25;
      #declare translmacaco = (-1)*(clock-0.5)*100*(3)/25;
    #else

    // macaco volta 10 graus; perna direita volta -30 graus; joelho esquerdo volta 10 graus 

      #declare cpd = 30-(clock-0.75)*100*30/25; // angulo entre corpo e perna direita
      #declare pbd = 0; // angulo entre perna direita e bota direita
      //perna esquerda
      #declare cpe = 0; // angulo entre corpo e perna esquerda
      #declare pbe = -10+(clock-0.75)*100*10/25; // angulo entre perna esquerda e bota esquerda
      //macaco
      #declare angulomacaco = -10+(clock-0.75)*100*10/25;
      #declare translmacaco = -3 + (-1)*(clock-0.5)*100*(1)/25;
    #end
  #end
#end

/////////// Pedacos do Corpo do Macaco

#declare botadir = 
union {
  object { canela translate <-1.4,0,0>}
  object { pe translate <-3,0,0>}
}

#declare botaesq = 
union {
  object { canela translate <1.4,0,0>}
  object { pe }
}

#declare pernadir =
union {
  object { coxa scale <-1,1,1> }
  object { botadir translate <1.4,1.8,0> rotate <pbd,0,0> translate <-1.4,-1.8,0>}
}

#declare pernaesq =
union {
  object { coxa }
  object { botaesq translate <-1.4,-1.8,0> rotate <pbe,0,0> translate <1.4,1.8,0> }
}


#declare macaco =
union {  
  object { braco }  
  object { braco scale <-1,1,1>}
  object { corpo } 
  object { cabeca }
  object { olho }
  object { olho scale <-1,1,1>}
  object { nariz }
  object { orelha }
  object { orelha scale <-1,1,1>}
  object { rabo }
  object { pernadir rotate <cpd,0,0> }
  object { pernaesq rotate <cpe,0,0>}
}


#declare chao =
  plane { <0, 1, 0>, -3.9
    pigment {
      checker color LightBlue, color White
    }
  }

////////// Montagem Final

union {
  object { chao }
  object { macaco rotate <angulomacaco,0,0> translate <0,0,translmacaco>}
}