#include <stdlib.h>
#include <SDL/SDL.h>
#include "Fondo.h"


Fondo::Fondo(char * path,int velocidad)
{
	VELOCIDADSCROLL=velocidad;
	vectorPaths.insert(vectorPaths.end(),path);
	coordX =0;
	coordXfloat=0;
	coordWfloat=640;
	numSiguienteTrozo = 0;
	loop=true;
}

Fondo::~Fondo()
{
	SDL_FreeSurface(fondoActual);
	SDL_FreeSurface(fondoSiguiente);
}

SDL_Surface* Fondo::getSurface()
{
	return fondoActual;	
}


void Fondo::AnadirFondo(char * path)
{
	vectorPaths.insert(vectorPaths.end(), path);	
}

SDL_Surface * Fondo::getSiguienteMapa()
{
	SDL_Surface * aux=NULL;
	
	//printf("%s\n",vectorPaths[numSiguienteTrozo]);
	aux = SDL_LoadBMP(vectorPaths[numSiguienteTrozo]);
	if (aux == NULL)
	{
		printf ("Error GORDO\n");
		exit(1);
	}
	SDL_SetColorKey(aux,SDL_SRCCOLORKEY, 0xFFFFFF);
	
	numSiguienteTrozo++;
	
	if ( (numSiguienteTrozo > vectorPaths.size()-1) && loop)
	{
		numSiguienteTrozo = 0;		
	}
	return aux;
	/*else 
	{
		return NULL;
	}*/
}
void Fondo::IniciarScroll()
{
	printf("Inicializando Fondo\n");
	fondoActual = getSiguienteMapa();
	printf("NUmero de fondos %d\n",vectorPaths.size());
	if (fondoActual == NULL)
	{
		printf ("Error al cargar el primer fondo\n");
		exit(1);
	}
	printf("Pillando siguiente fondo\n");
	fondoSiguiente = getSiguienteMapa();
	if (fondoSiguiente == NULL)
	{
		printf ("Error al cargar el primer fondoSiguiente\n");
		exit(1);
	}
	printf("Pillando anticipacion\n");
	fondoAnticipacion = getSiguienteMapa();
	if (fondoAnticipacion == NULL)
	{
		printf ("Error al cargar el primer fondoSiguiente\n");
		exit(1);
	}
	printf("Inicializacion finished\n");
	primerCacho.x =0;
	primerCacho.y =0;
	primerCacho.w = fondoActual->w;
	primerCacho.h = fondoActual->h;
	
	segundoCacho.x =0;
	segundoCacho.y =0;
	segundoCacho.w = 0;
	segundoCacho.h = 480;
	
}

void Fondo::Actualizar(float time)
{
	float avance=VELOCIDADSCROLL*time;
	coordXfloat+=avance;
	coordWfloat-=avance;
	
	int avanceint=avance;
	
	coordX=coordXfloat;
	
	primerCacho.x = coordX%640;
	if (primerCacho.w < avanceint)
		primerCacho.w = 0;
	else
		primerCacho.w =coordWfloat;
		
	segundoCacho.w = coordX%640;
	//printf("CoordX: %d\n",coordX);
	//printf("Primer Cacho.w %d\n",primerCacho.w);
	
	if (primerCacho.w == 0)
	{
		SDL_FreeSurface(fondoActual);
		fondoActual = fondoSiguiente;
		fondoSiguiente = fondoAnticipacion;
		fondoAnticipacion = getSiguienteMapa();
		if (fondoAnticipacion == NULL)
		{
			printf("Error. No se puede cargar el fondo Anticipacion\n");
			exit(1);
		}
		//coordXfloat=0;
		coordWfloat=640;
		primerCacho.x = 0;
		primerCacho.w = 640;
		segundoCacho.x = 0;
		segundoCacho.w = 0;
	}	
	
}

void Fondo::Dibujar(SDL_Surface * pantalla)
{
	SDL_Rect pos1;
	pos1.x=0;
	pos1.y=0;
	pos1.w = 0; //da igual este valor
	pos1.h = 0; //da igual este valor
	
	//printf("Posicion del fondoActual %d \n",primerCacho.x);
	SDL_BlitSurface(fondoActual,&primerCacho,pantalla,&pos1);
	pos1.x = primerCacho.w;
	//printf("Posicion del fondo Siguiente %d \n",primerCacho.w);
	//printf("Cuanto pinto de segundo x=%d, y=%d, w=%d, h=%d\n",segundoCacho.x,segundoCacho.y,segundoCacho.w,segundoCacho.h);
	//printf("Donde Pinto el segundo cacho x=%d y=%d w=%d h=%d\n",pos1.x,pos1.y,pos1.w,pos1.h);
	SDL_BlitSurface(fondoSiguiente,&segundoCacho,pantalla,&pos1);
}

void Fondo::setLoop(bool valor)
{
	loop = valor;
}

Uint32 Fondo::getCoordX()
{
	return coordX;
}
