#include "eixos.inc"


// CORES E TEXTURAS
background{ color rgb < 0.75, 0.80, 0.85 > }

#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_fosca = 
  texture{
    pigment{ color rgb < 1.00, 0.80, 0.10 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_espelho = 
  texture{
    pigment{ color rgb < 1.00, 0.85, 0.30 > }
    finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 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.005 }
  }


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


// DECLARACOES 
#declare chao = 
  box{ <-20,-40,-1>, <+20,+45,2> }

#declare cilindro_base = 
  cylinder{
    < 0.00, -2.00, 3.00>,
    < 0.00, +2.00, 3.00>,
    0.75
  }

#declare cone_asa_direita =
  cone{
    <0.75, 0.00, 3.00>, 0.4,
    <2, 0.00, 3.00>, 0
  }

#declare cone_asa_esquerda =
  cone{
    <-0.75, 0.00, 3.00>, 0.4,
    <-2.00, 0.00, 3.00>, 0
  }

#declare box_base =
  box{
    <0.5, -1, 3.25>,
    <-0.5, 1, 1.25> 
  }

#declare esfera_base =
  sphere{
    <0.00, 0.00, 0.25>, 1
  }

#declare furo_cilindro = 
  cylinder{
    < 0.00, -3.00, 3.00>,
    < 0.00, +3.00, 3.00>,
    0.5
  }


#declare box_base_tanque =
  box{
    <-1.5, 7, -1>,
    <1.5, 10, -2> 
  }

#declare roda_tanque =
  sphere{
    <0, 8.5, -2.5>, 0.5
  }

#declare cone_tanque =
  cone{
    <0, 8.5, -1>, 1,
    <0, 8.5, 1>, 0
  }


// MACROS
#macro nave_alien (cor)
  union{
    union{
      difference{
        object {cilindro_base}
        object {furo_cilindro}
      }
      difference{
        object {box_base}
        object {cilindro_base}
      }
      object {esfera_base}
    }
    object {cone_asa_direita translate < 0,-1,0 >} 
    object {cone_asa_direita translate < 0,1,0 >}
    object {cone_asa_esquerda translate < 0,-1,0 >}
    object {cone_asa_esquerda translate < 0,1,0 >}

    texture{
      pigment{ color rgb < 1.000, 0.300, 0.100 > }
      finish{ diffuse 0.8 ambient 0.2 }
    }
  }
#end

#macro tanque_humano (cor)
  union{
    object{box_base_tanque}
    object{roda_tanque translate<1, 0, 0>}
    object{roda_tanque translate<-1, 0, 0>}
    object{cone_tanque}

    texture{
      pigment{ color rgb < 0.200, 0.800, 0.300 > }
      finish{ diffuse 0.8 ambient 0.2 }
    }
  }
#end


#macro armada_alien(linhas, colunas)
  union{
    #local ll = 0;
    #while (ll < linhas)
      #local cc = 0;
      #while (cc < colunas)
        #if (sin(15*ll*ll*cc*cc) > -0.50) 
          object {nave_alien(0) translate <4.5*(ll - linhas/2), -5*cc, 0>}
        #end
        #local cc = cc + 1;
      #end
      #local ll = ll + 1;
    #end
  }
#end

#macro armada_humana(linhas, colunas)
  union{
    #local ll = 0;
    #while (ll < linhas)
      #local cc = 0;
      #while (cc < colunas)
        #if (sin(15*ll*ll*cc*cc) > -0.30)
          object {tanque_humano(0) translate <4.5*(ll - linhas/2), 5*cc, 0>}
        #end
        #local cc = cc + 1;
      #end
      #local ll = ll + 1;
    #end
  }
#end

#declare ma = 6;
#declare na = 12;
object{armada_alien(ma,na) }

#declare mh = 12;
#declare nh = 7;
object{armada_humana(mh,nh) }

#include "camlight.inc"
#declare centro_cena = < 0.00, 6.00, 1.00 >;
// #declare raio_cena = 1.25*m*n;
#declare raio_cena = 57;
#declare dir_camera = < 5, 7, 4.5 >;
#declare dist_camera = 5*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)