#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/gl.h>
#include <GL/glu.h>

#include <stdlib.h>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

#include "Moteur.h"

#include "CSpritesPerso.h"

map<string, CSpritesPerso*> ImgsPerso;


CSpritesPerso::CSpritesPerso()
{
	//Constructeur ...
}

CSpritesPerso::~CSpritesPerso()
{
	//Destructeur ...
}

void CSpritesPerso::LoadTexPerso(const char *Name)
{
	char temp[100];
	int i, ii;

	for(i = 0; i < 10; ++i)
	{
		ii = i + 1;
		sprintf(temp, "./Images/Personnages/%s/immobile%d.png", Name, ii);		
		TexImmobile[i] = Moteur.NouvelleTexture(temp);
	}


	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/marche%d.png", Name, ii);	
		TexMarche[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 30; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/saut%d.png", Name, ii);	
		TexSaut[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/accrocher%d.png", Name, ii);	
		TexAccrocher[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/deequilibre%d.png", Name, ii);	
		TexDeequilibre[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/attaque%d.png", Name, ii);	
		TexAttaque[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/sortboulefeu%d.png", Name, ii);	
		TexSortBouleFeu[i] = Moteur.NouvelleTexture(temp);
	}
	
	for(i = 0; i < 10; ++i)
	{
		ii = i +1;
		sprintf(temp, "./Images/Personnages/%s/teleport%d.png", Name, ii);	
		TexTeleport[i] = Moteur.NouvelleTexture(temp);
	}
	
}

void CSpritesPerso::DessinePerso(int Etat, int nbAnim, int PosX, int PosY, int TailleX, int TailleY, bool VersLaDroite, unsigned char Red, unsigned char Green, unsigned char Blue, unsigned char Alpha)
{
	switch (Etat)
	{
		case IMMOBILE:
			Moteur.AfficheTexture(TexImmobile[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			break;

		case MARCHE:
			if(VersLaDroite) Moteur.AfficheTexture(TexMarche[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexMarche[nbAnim / 100], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
			
		case SAUT:
			if(VersLaDroite) Moteur.AfficheTexture(TexSaut[nbAnim / (1000/29)], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexSaut[nbAnim / (1000/29)], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
			
		case ACCROCHER:
			if(VersLaDroite) Moteur.AfficheTexture(TexAccrocher[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexAccrocher[nbAnim / 100], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
		
		case DEEQUILIBRE:
			if(VersLaDroite) Moteur.AfficheTexture(TexDeequilibre[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexDeequilibre[nbAnim / 100], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
		
		case ATTAQUE:
			if(VersLaDroite) Moteur.AfficheTexture(TexAttaque[nbAnim / 50], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexAttaque[nbAnim / 50], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
			
		case SORT_BOULE_FEU:
			if(VersLaDroite) Moteur.AfficheTexture(TexSortBouleFeu[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexSortBouleFeu[nbAnim / 100], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
			
		case TELEPORT:
			if(VersLaDroite) Moteur.AfficheTexture(TexTeleport[nbAnim / 100], PosX, PosY, TailleX, TailleY, Red, Green, Blue, Alpha);
			else Moteur.AfficheTexture(TexTeleport[nbAnim / 100], PosX, PosY, -TailleX, TailleY, Red, Green, Blue, Alpha);
			break;
				
		
	}
}


