// Last edited on 2007-04-01 20:54:03 by stolfi
// Processed by remove-cam-lights

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

#declare raio = 2.000;

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

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

#declare preto = 
  texture {
    pigment { color rgb < 0.2, 0.2, 0.2 > }
    finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.2 }
  }

#declare vermelho = 
  texture {
    pigment { color rgb < 1.0, 0.0, 0.0 > }
    finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.2 }
  }

#declare base1 =
  box {
    <0,0,0>,
    <2,2,0.5>
    texture { preto }
}

#declare base2 =
  box {
    <0,0,0>,
    <2,2,0.5>
    texture { vermelho }
}

#declare peao =
  union{
 cylinder {
      < 0, 0, 0 >,
      < 0, 0, 0.3 >,
      0.5
   }
 cylinder {
      < 0, 0, 0.3 >,
      < 0, 0, 1.2 >,
      0.25
   }
 sphere {
     < 0, 0, 1.3 >, 0.35 
   }
}

#declare rei =
union{
 difference{
  union{
   cylinder {
        < 0, 0, 0 >,
        < 0, 0, 0.3 >,
        0.8
     }
   cylinder {
        < 0, 0, 0.3 >,
        < 0, 0, 3 >,
        0.35
     }
   cylinder {
        < 0, 0, 3 >,
        < 0, 0, 3.3 >,
        0.5
     }
   }
   cylinder {
    < 0, 0, 3.05 >,
    < 0, 0, 3.35 >,
    0.45
   }
 }
  sphere {
   < 0, 0, 3 >, 0.4 
  }
}

#declare torre =
difference{
 union{
  cylinder {
       < 0, 0, 0 >,
   < 0, 0, 0.3 >,
   0.5
  }
  cylinder {
   < 0, 0, 0.3 >,
   < 0, 0, 1.7 >,
   0.4
  }
  cylinder {
   < 0, 0, 1.7 >,
   < 0, 0, 1.9 >,
   0.5
  }
  }
  cylinder {
   < 0, 0, 1.75 >,
   < 0, 0, 1.95 >,
   0.45
  }
}

#declare i=0;
#declare j=0;
#declare roleta = seed(123);

#while (j<30)
 #while (i<30)
  #if (mod(i+j,2) =1)
   object { base1
    translate <i*2,j*2,0>
   }
  #else
   object { base2
    translate <i*2,j*2,0>
   }
  #end
  
  #declare peca = rand(roleta);
  #if (peca<0.01)
   object { rei
    translate <i*2+1,j*2+1,0.5>
    texture {amarelo}
    }
  #else
  #if (peca<0.02)
   object { rei
    translate <i*2+1,j*2+1,0.5>
    texture {azul}
    }
  #else
  #if (peca<0.05)
   object { torre
    translate <i*2+1,j*2+1,0.5>
    texture {amarelo}
    }
  #else
  #if (peca<0.1)
   object { torre
    translate <i*2+1,j*2+1,0.5>
    texture {azul}
    }
  #else
  #if (peca<0.2)
   object { peao
    translate <i*2+1,j*2+1,0.5>
    texture {amarelo}
    }
  #else 
  #if (peca<0.3)
   object { peao
    translate <i*2+1,j*2+1,0.5>
    texture {azul}
    }
  #end 
  #end
  #end
  #end
  #end
  #end
  #declare i = i+1;
 #end
 #declare j = j+1;
 #declare i=0;
#end

// Original camera parameters:
// #local cam_ctr = <30,30,1>
// #local cam_vec = (<0,0,50>-<30,30,1>)
// #local cam_sky = z

#include "camlight.inc"
camlight(<30,30,1>,<10,10,10>,90.0,z,1.0)