///////////////////////////////////////////
// Computacao Grafica
//
// Exercicio de POV-Ray
// 09/11/2000
//////////////////////////////////////////
//
//  Luciano Rodrigues Poli - RA 971096
//
//////////////////////////////////////////

// Importacao de bibliotecas de cores e texturas pre-definidas.
#include "textures.inc"
#include "colors.inc"

// Declaracao de cores utilizadas na imagem
#declare vermelho =	rgb < 1.00, 0.00, 0.00 >;
#declare marrom = rgb < 0.50, 0.30, 0.00 >;
#declare verde = rgb < 0.00, 1.00, 0.00 >;
#declare bege =	rgb < 1.00, 0.90, 0.70 >;
#declare amarelo = rgb < 1.00, 1.00, 0.00 >;
#declare azul =	rgb < 0.00, 0.00, 1.00 >;
#declare cinza = rgb < 0.60,  0.60, 0.60 >;
#declare preto = rgb < 0.10, 0.10, 0.10 >;
#declare branco = rgb < 1.00, 1.00, 1.00 >;

// Declaracao de parametros iniciais
background{ color branco }

light_source {
  < -5.00, 6.00, -10.00 >
  color branco
}

camera {
  angle	15
  location  < -15.00, 6.00, -30.00 >
  look_at   < 3.00, 1.00, 0.00 >
}

#declare base = seed(pi);

	// Variavel que conta o numero de predios desenhados
	#declare contador = 0;
    #declare cor = LightGray;
	#while(contador < 5)

		// Varia as cores dos predios da cidade
		#if (contador = 1)
			#declare cor = Blue;
		#end
		#if (contador = 2)
			#declare cor = Red;
		#end
		#if (contador = 3)
			#declare cor = Green;
		#end
		#if (contador = 4)
			#declare cor = Brown;
		#end

	#declare terreo =
	difference {
		// andar terreo
	 	box { <0.00, 0.00, 0.00>, <0.8, 0.6, 0.6>
			pigment {color cor}
		}
		// Porta do andar terreo
		box { <0.2, 0.00, -0.1>, <0.6, 0.4, 0.3>
			pigment {color Black}
		}
	}

	#declare andar =
	difference {
		// andar
	 	box { <0.00, 0.6, 0.00>, <0.8, 1.2, 0.6>
			pigment {cor}
		}
		// janela da frente da esquerda
		box { <0.1, 0.7, -0.1>, <0.35, 1.1, 0.3>
			pigment {Black}
		}
		// janela da frente da direita
		box { <0.45, 0.7, -0.10>, <0.7, 1.1, 0.3>
			pigment {Black}
		}
		// janela lateral
		box { <-0.1, 0.8, 0.2>, <0.3, 1.0, 0.4>
			pigment {Black}
		}
	}


		union {
			object {terreo}

			// Variavel que ira contar o numero de andares que foram desenhados
			#declare indice = 0;

			#while (indice < 1+int(rand(base)*5))

				//Desenha um andar do predio
				object{andar
					translate <0.0, (0.6*indice), 0.0>
				}

				// Atualiza contador de andares
				#declare indice = indice+1;
			#end

			translate <0.9*contador, 0.0, 0.0>
    	}

		// Atualiza contador de predios
		#declare contador = contador+1;

	#end