#include "Juego.h"
#include "Fondo.h"
#include "Jugador.h"
#include "Manada.h"
#include "Timer.h"
#include "Texto.h"
#include "Colision.h"
#include "SDL/SDL.h"

Juego::Juego(SDL_Surface * pant)
{	
	pantalla=pant;		
	vidas=4;
	restar=salir=0;
}

void Juego::Terminar()
{
	delete player;
	delete fondo;
	delete malos;
	delete timer;
	delete texto;
	delete colision;
}

Juego::~Juego()
{
	Terminar();
}

void Juego::Actualizar()
{
	float time = timer->getPasado();
	fondo2->Actualizar(time);
	fondo->Actualizar(time);
	player->Actualizar(time);
	malos->Actualizar(time,fondo->getCoordX());
	int col = colision->ColisionNaveEnemigos(player,malos->getVectorEnemigos());
	if (col>=0)
		RestarVida();
	
	int colDisparo;
	int colNave = colision->ColisionDisparosEnemigos(malos->getVectorEnemigos(),player->getVectorDisparos(),&colDisparo);
	if (colNave>=0)
	{
		malos->EliminarEnemigoEnPantalla(colNave);	
		player->EliminarDisparoEnPantalla(colDisparo);
	}
	sprintf(TEXTO,"VIDAS : %d",vidas);	
}

void Juego::Dibujar()
{
	//Faltaria hacer el scrolling del fondo.
	fondo2->Dibujar(pantalla);
	fondo->Dibujar(pantalla);
	
	//Como luego va a haber el scrolling, creo que cada vez va a 
	//tener que pintarse el fondo. Que opinais? jeje
	
	player->Dibujar(pantalla);//en vez de pasarle la pantalla habria
								//que pasarle el fondo para que el 
								// player se dibuje sobre el fondo
	player->DibujaDisparos(pantalla);
	malos->Dibujar(pantalla);	
	texto->EscribeTexto(TEXTO,pantalla,posicion,255,0,0);
	SDL_Flip(pantalla);
}

void Juego::RestarVida()
{
	vidas--;
	salir=1;
	if (vidas >=0)
		restar=1;
	/*
	Terminar();
	Iniciar();	*/
}

void Juego::CargarNivel()
//Se podria hacer leyendo de ficheros, pero para resumir lo 
//hacemos nosotros a pelo.
{
	timer = new Timer();
	colision = new Colision();
	timer->start();
	texto = new Texto("../data/fuentePrueba.ttf",50);
	texto->setEstilo (TTF_NEGRITA);
	posicion.x = 50;
	posicion.y=10;	
	
	player = new Jugador ("../data/prota.bmp");	
	malos = new Manada();
	
	fondo = new Fondo ("../data/fondoNuevo.bmp",30);
	fondo->AnadirFondo("../data/fondoNuevo2.bmp");
	fondo2 = new Fondo 	("../data/Fondo.bmp",10);
	fondo->IniciarScroll();
	fondo2->IniciarScroll();	
}

void Juego::Iniciar ()
{	
	CargarNivel();	
			
    while (!salir)
    {		
		Actualizar();
		Dibujar();			
		//Coge el siguiente evento de la cola de eventos
    	while (SDL_PollEvent(&evento))
    	{
			//en keysym se va a guardar el simbolo de la tecla que ha 
			//producido el evento
			SDL_keysym keysym;	
			keysym = evento.key.keysym;				
			switch (evento.type)					
			{					
				case SDL_KEYDOWN: 
					  if (keysym.sym==SDLK_ESCAPE)
					  {
						salir=1;
					  }
					  if (keysym.sym==SDLK_LEFT)
					  {
						player->setIzq(true);  
					  }
					  if (keysym.sym==SDLK_RIGHT)
					  {
						player->setDer(true);  
					  }
					  if (keysym.sym==SDLK_UP)
					  {
						player->setArri(true);  
					  }
					  if (keysym.sym==SDLK_DOWN)
					  {
						player->setAba(true);    
					  }
					  
					  if (keysym.sym==SDLK_SPACE)
					  {
						player->Dispara();    
					  }
					  
					  
					  break;				
					
				case SDL_KEYUP:
					  if (keysym.sym==SDLK_ESCAPE)
					  {
						salir=1;
					  }
					  if (keysym.sym==SDLK_LEFT)
					  {
						player->setIzq(false);  
					  }
					  if (keysym.sym==SDLK_RIGHT)
					  {
						player->setDer(false);  
					  }
					  if (keysym.sym==SDLK_UP)
					  {
						player->setArri(false);  
					  }
					  if (keysym.sym==SDLK_DOWN)
					  {
						player->setAba(false);  
					  }
					  break;
				default : break;
			}			
    	}
	}
	if (restar)
	{
		restar=0;
		salir=0;
		Terminar();
		Iniciar();
	}
}
