diff --git a/ElderInternalIgnition/ElderInternalIgnition.cbp b/ElderInternalIgnition/ElderInternalIgnition.cbp index da3a256248287cf0a4e5dda5674d34b43d62ff40..aade84276db97d4f3dcd299d5e71a8331e897e6a 100644 --- a/ElderInternalIgnition/ElderInternalIgnition.cbp +++ b/ElderInternalIgnition/ElderInternalIgnition.cbp @@ -33,6 +33,7 @@ </Target> </Build> <Compiler> + <Add option="-Wall" /> <Add directory="./../Libs/libroxml-2.3.0/src" /> <Add directory="./../src" /> <Add directory="./../Libs/SDL-1.2.15/include" /> diff --git a/src/SDL_bis.c b/src/SDL_bis.c index bcbe5cd1b126d58b3ceb48f340f8c7a2f0cee541..6448f5b2dbbc200a13d0ec3708db707bfa00a261 100644 --- a/src/SDL_bis.c +++ b/src/SDL_bis.c @@ -6,6 +6,38 @@ #include "structures.h" #include "controleur.h" +char* castIntToChar(int n) +{ + switch(n) + { + case 0: + return "0"; + break; + case 1: + return "1"; + break; + case 2: + return "2"; + break; + case 3: + return "3"; + break; + case 4: + return "4"; + break; + case 5: + return "5"; + break; + case 6: + return "6"; + break; + default: + return "-1"; + break; + } +} + + char* afficherListe(char** nomsClasses, char** skinsClasses, int nbChoix, TTF_Font* police,SDL_Color couleurTexte) { int i, quitter; @@ -217,30 +249,38 @@ int SDL_bis() SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3_bis); SDL_Flip(ecran); - SDL_Surface* textes[6]; + SDL_Surface textes[6]; SDL_Rect posTextes[6]; police=TTF_OpenFont("../resources/fonts/arial.ttf",26); -/* + + char src[50], dest[50]; + for(i=0;i<6;i++) { - textes[i]= TTF_RenderText_Shaded(police, test, couleurBlanche,couleurNoire); + strcpy(dest, "personnage "); + strcpy(src, castIntToChar(i+1)); + textes[i]= *TTF_RenderText_Shaded(police, strcat(dest, src), couleurBlanche,couleurNoire); } for(i=0;i<3;i++) { - posTextes[i].x=ecran->w/4-textes[i]->w/2; - posTextes[i].y=(i+1)*ecran->h; - SDL_BlitSurface(textes[i],NULL,ecran,&(posTextes[i])); + posTextes[i].x=ecran->w/4-textes[i].w/2; + posTextes[i].y=(i+1)*ecran->h/5; + SDL_BlitSurface(&textes[i],NULL,ecran,&(posTextes[i])); } for(i=3;i<6;i++) { - posTextes[i].x=(3*ecran->w)/4-textes[i]->w/2; + posTextes[i].x=(3*ecran->w)/4-textes[i].w/2; posTextes[i].y=posTextes[i-3].y; - SDL_BlitSurface(textes[i],NULL,ecran,&posTextes[i]); + SDL_BlitSurface(&textes[i],NULL,ecran,&posTextes[i]); } SDL_Flip(ecran); - printf("%d",etat);*/ + + int j,p; + j=0; + p=0; + char *classeChoisie; while(etat==CONFIGURATION) { SDL_WaitEvent(&event); @@ -250,14 +290,32 @@ int SDL_bis() etat=FERMER; break; case SDL_MOUSEBUTTONDOWN: - afficherListe(obtenirNomsClasses(), obtenirSkinsClasses(),nbClasses(), TTF_OpenFont("../resources/fonts/arial.ttf",26),couleurBlanche); + if(event.button.x>posTextes[0].x&&event.button.x<posTextes[0].x+textes[0].w) + j=1; + if(event.button.x>posTextes[3].x&&event.button.x<posTextes[3].x+textes[3].w) + j=2; + for(i=0;i<3;i++){ + if(event.button.y>posTextes[i].y&&event.button.y<posTextes[i].y+textes[i].h) + p=i+1; + } + if(j!=0&&p!=0){ + classeChoisie=afficherListe(obtenirNomsClasses(), obtenirSkinsClasses(), nbClasses(), police, couleurBlanche); + ajouterPersonnage(classeChoisie, p, j); + ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF); + } + j=0; + p=0; break; default: break; } - /*for(i=0;i<6;i++){ - SDL_BlitSurface(textes[i],NULL,ecran,&(posTextes[i])); - }*/ + for(i=0;i<6;i++){ + SDL_BlitSurface(&textes[i],NULL,ecran,&(posTextes[i])); + } + SDL_BlitSurface(texte,NULL,ecran,&pos_texte); + SDL_BlitSurface(texte2,NULL,ecran,&pos_texte2); + SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3); + SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3_bis); SDL_Flip(ecran); } diff --git a/src/controleur.c b/src/controleur.c index 399de853898c79e3917b52ec57297af112c888f8..836c81320979820d9632673bc1be7089668b94d0 100644 --- a/src/controleur.c +++ b/src/controleur.c @@ -15,6 +15,7 @@ #include "classe.h" #include "gamePackage.h" #include "roxml.h" +#include "SDL.h" Partie * partieGlobale; Game_Package packGlobal; @@ -188,6 +189,26 @@ char ** obtenirDescriptionCarte(){ free(tab); } +/*! + * \fn Case * trouverCase(Carte c, int x, int y) + * \brief La fonction retourne un pointeur vers la case de coordonnées x,y + * + * \param les coordonnées x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilisée + * \return un pointeur vers cette 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]; + } +} + /*! * \fn int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur) * \brief La fonction ajoute un personnage au tableau de personnages d'un Joueur à l'indice numTab(compris entre 0 et TAILLE_MAX_GROUPE). @@ -201,14 +222,15 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){ int i; i=0; //Recherche de la classe dans le Package - while((strcmp(nomClasse,(packGlobal.Classes_Package[i].nom))!=0)&&(i<=nbClasses())){ + while(strcmp(nomClasse,getNomClasse(&packGlobal.Classes_Package[i]))!=0&&i<nbClasses()){ i++; } if(i>nbClasses()){ return 0; } + //Création du personnage - Personnage * p = default_personnage(i,packGlobal); + Personnage * p = default_personnage(i,packGlobal,trouverCase(packGlobal.Cartes_Package[0],0,0)); //Ajout du Personnage à l'équipe du Joueur switch (numJoueur){ diff --git a/src/controleur.h b/src/controleur.h index 3410c3e69ae929f0e6fe2d6e0f4492bbe3845d23..8f29efe726a97bfbb99a519a062fad481cea7ecd 100644 --- a/src/controleur.h +++ b/src/controleur.h @@ -22,6 +22,8 @@ char ** obtenirNomsCartes(); char ** obtenirDescriptionCarte(); void freeCartes(char **); +Case * trouverCase(Carte c, int x, int y); + void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur); diff --git a/src/controleurSDL.c b/src/controleurSDL.c index cf23861400745752079e555834447b43d186b416..1a9a452ecd0d91c70d8a7a68297249098802142d 100644 --- a/src/controleurSDL.c +++ b/src/controleurSDL.c @@ -69,25 +69,7 @@ int y_case_cliquee(int x_pixel, int y_pixel) } return y_case; } -/*! - * \fn Case * trouverCase(Carte c, int x, int y) - * \brief La fonction retourne un pointeur vers la case de coordonnées x,y - * - * \param les coordonnées x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilisée - * \return un pointeur vers cette 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]; - } -} + /*! * \fn void persosuivant() * \brief La fonction permet de selectionner le personnage suivant diff --git a/src/controleurSDL.h b/src/controleurSDL.h index 438860487afbb5375488c4c9abde33f2cdcfc0fb..9762664bf855115e7765095795d85f8509d092ac 100644 --- a/src/controleurSDL.h +++ b/src/controleurSDL.h @@ -12,7 +12,7 @@ int y_case_cliquee(int x_pixel, int y_pixel); int x_case_cliquee(int x_pixel, int y_pixel); -Case * trouverCase(Carte c, int x, int y); + void deplacement_personnage(int x, int y); diff --git a/src/personnage.c b/src/personnage.c index 2eb67af6ee04c54cdefe1c6a8397c26d5ea976dc..914b4b6ed5fce24a26c518e733090de0d5ddbcb2 100644 --- a/src/personnage.c +++ b/src/personnage.c @@ -56,10 +56,10 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart) * \param Le numéro de la défination du personnage dans le fichier XML, un game_package. * \return Un personnage pret a l'action. */ -Personnage* default_personnage(int numero, Game_Package Pack) +Personnage* default_personnage(int numero, Game_Package Pack,Case *casedepart) { Personnage* Perso = init_personnage(); - set_personnage(Perso, &Pack.Classes_Package[numero], NULL); + set_personnage(Perso, &Pack.Classes_Package[numero], casedepart); return Perso; } diff --git a/src/personnage.h b/src/personnage.h index e8c92e9fea01cc87cecd01addb661799cbd580e5..cbb2402f8e2d988635d92f830f23d781cf4da97b 100644 --- a/src/personnage.h +++ b/src/personnage.h @@ -10,7 +10,7 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart); Personnage* init_personnage(); -Personnage* default_personnage(int numero, Game_Package Pack); +Personnage* default_personnage(int numero, Game_Package Pack, Case *casedepart); void freePersonnage(Personnage * p);