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

Juego::Juego(SDL_Surface * pant)
{	
	pantalla=pant;	
	timer = new Timer();
	timer->start();
	texto = new Texto("../data/fuentePrueba.ttf",50);
	texto->setEstilo (TTF_NEGRITA);
	posicion.x = 50;
	posicion.y=10;	
}

Juego::~Juego()
{
	delete player;	
	delete fondo;
	delete malos;
}

void Juego::Actualizar()
{
	float time = timer->getPasado();
	fondo2->Actualizar(time);
	fondo->Actualizar(time);
	player->Actualizar(time);
	malos->Actualizar(time,fondo->getCoordX());
	sprintf(TEXTO,"%d",fondo->getCoordX());	
}

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
	malos->Dibujar(pantalla);	
	texto->EscribeTexto(TEXTO,pantalla,posicion,255,0,0);
	SDL_Flip(pantalla);
}

void Juego::CargarNivel()
//Se podria hacer leyendo de ficheros, pero para resumir lo 
//hacemos nosotros a pelo.
{
	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/Fondo2.bmp",10);
	fondo->IniciarScroll();
	fondo2->IniciarScroll();	
}

void Juego::Iniciar ()
{
	CargarNivel();	
	int salir = 0;	
    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);    
					  }
					  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;
			}			
    	}
	}		
}
