You need to sign in or sign up before continuing.
-
Montjoie Henri authoredMontjoie Henri authored
controleurSDL.c 2.51 KiB
#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;
}
int persoactuel(){
return perso_actuel;
}
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];
deplacement_unitaire(perso, case_cliquee,HAUTEUR_CASE,LARGEUR_CASE);
}
}
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);
}