#include <stdlib.h>
#include <SDL/SDL.h>
#include "structures.h"
#include "partie.h"
#include "joueur.h"
#include "joueurList.h"
#include "personnage.h"
#include "case.h"
#include "deplacements.h"
#include "SDL.h"
#include "controleurSDL.h"

/*!
* \file controleurSDL.c
* \brief Fichier contenant le code des fonctions du controleur pour l'affichage avec SDL
*/


Carte Carte_actuelle;
Personnage ListePersos[NB_PERSO];
int perso_actuel=0;


void init_controleur(SDL_Rect Position_Case[])
{
    int i;
    for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++)
     {
       init_case(&Carte_actuelle[i],Position_Case[i].x,Position_Case[i].y,NULL);
     }
    for(i=0;i<NB_PERSO;i++)
    init_personnage(&ListePersos[i],NULL,&Carte_actuelle[i]);
}

int x_case_cliquee(int x_pixel, int y_pixel)
{
    return x_pixel/LARGEUR_CASE;
}

int y_case_cliquee(int x_pixel, int y_pixel)
{
    int i, x_case, y_case;
    x_case = x_pixel/LARGEUR_CASE;
    y_case = y_pixel/HAUTEUR_CASE;
    for(i=1;i<LARGEUR_CARTE;i+=2)
    {
           if(x_case==i)
            {
                y_case=(y_pixel-HAUTEUR_CASE/2)/HAUTEUR_CASE;
            }
    }
    return y_case;
}

Case * trouverCase(Carte c, int x, int y)
{
    if((x<0)||(x>=LARGEUR_CARTE)){
        return NULL;
    }
    else if((y<0)||(y>=HAUTEUR_CARTE)){
        return NULL;
    }
    else{
        return &c[(y*LARGEUR_CARTE)+x];
    }
}

persosuivant(){
    if(perso_actuel<NB_PERSO-1)
    perso_actuel++;
    else
    perso_actuel=0;
}

void deplacement_personnage(int x, int y)
{
    if(x<LARGEUR_CARTE*LARGEUR_CASE&&y<HAUTEUR_CARTE*HAUTEUR_CASE)
    {
        Case* case_cliquee = trouverCase(Carte_actuelle,x_case_cliquee(x,y),y_case_cliquee(x,y));
        Personnage* perso = &ListePersos[perso_actuel];
        if (case_a_cote(perso,case_cliquee,HAUTEUR_CASE,LARGEUR_CASE)==vrai)
        {
            deplacer_personnage(perso, case_cliquee);
        }
    }
}

Case* get_case_perso(int num)
{
    Personnage* perso = &ListePersos[num];
    return getPosition(perso);
}

int get_position_perso_x(int num)
{
    Case* case_perso = get_case_perso(num);
    return get_x(case_perso);
}

int get_position_perso_y(int num)
{
    Case* case_perso = get_case_perso(num);
    return get_y(case_perso);
}

Case* deplacement_brillance(int x,int y)
{
    if(x<LARGEUR_CARTE*LARGEUR_CASE&&y<HAUTEUR_CARTE*HAUTEUR_CASE)
    {
        return trouverCase(Carte_actuelle,x_case_cliquee(x,y),y_case_cliquee(x,y));
    }
    return NULL;
}

int get_position_case_y(Case * Case){
    return get_y(Case);
}

int get_position_case_x(Case * Case)
{
    return get_x(Case);
}