Fix' un bug lors de l'empilement + prise en compte du cas de PILE PLEINE
This commit is contained in:
Controleur
@ -107,16 +107,17 @@ void detruirePileCartes(PileCartes *const pileCartes)
|
||||
}
|
||||
|
||||
|
||||
void empilerPileCartes(PileCartes *const pileCartes, Carte *const carte)
|
||||
bool empilerPileCartes(PileCartes *const pileCartes, Carte *const carte)
|
||||
{
|
||||
if(pileCartes->sommet < MAPSTACKSIZE)
|
||||
if(pileCartes->sommet < MAPSTACKSIZE - 1)
|
||||
{
|
||||
pileCartes->pile[++pileCartes->sommet] = carte;
|
||||
return true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
/* Gestion de l'erreur ? L'utilisateur ne peut plus empiler de carte actuellement... */
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,9 +60,9 @@ void detruirePileCartes(PileCartes *const pileCartes);
|
||||
*
|
||||
* @param pileCartes La pile de cartes dans laquelle on empile la carte.
|
||||
* @param carte Carte à empiler.
|
||||
* @return Procédure.
|
||||
* @return Un booléen qui indique si l'empilement a été possible ou non...
|
||||
*/
|
||||
void empilerPileCartes(PileCartes *const pileCartes, Carte *const carte);
|
||||
bool empilerPileCartes(PileCartes *const pileCartes, Carte *const carte);
|
||||
|
||||
/**
|
||||
* @brief Dépile une carte d'une pile de cartes (ça se tient aussi...).
|
||||
|
@ -165,7 +165,11 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
|
||||
libererMemoireElementsAffiches(carte, MAPFILE, tabPointsConvertis, aggloConverti, nbPointsAffiches, tabPointeursCercles);
|
||||
|
||||
// On empile cette carte dans la pile des cartes précédentes
|
||||
empilerPileCartes(&previous, carte);
|
||||
if(!empilerPileCartes(&previous, carte))
|
||||
{
|
||||
/* AFFICHER UN MESSAGE CAR IMPOSSIBLE DE ZOOMER ??? */
|
||||
break;
|
||||
}
|
||||
|
||||
// On crée une nouvelle carte pour la vue demandée (qui possèdera les mêmes champs que la carte actuelle [cf. la documentation de la fonction])
|
||||
carte = creerCarte(carte);
|
||||
@ -179,12 +183,15 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
|
||||
|
||||
case ZOOM_NEXT:
|
||||
case ZOOM_PREV:
|
||||
// L'utilisateur a effectué un zoom sur la carte (et il est autorisé à le faire)
|
||||
// --> 0n libère la mémoire des éléments actuellement affichés !
|
||||
// L'utilisateur a changé de vue sur la fenêtre --> 0n libère la mémoire des éléments actuellement affichés !
|
||||
libererMemoireElementsAffiches(carte, MAPFILE, tabPointsConvertis, aggloConverti, nbPointsAffiches, tabPointeursCercles);
|
||||
|
||||
// L'utilisateur a demandé d'afficher la vue précédente / suivante. Donc on commence par empiler la vue actuelle dans la pile des suivantes / précédentes.
|
||||
empilerPileCartes((action == ZOOM_NEXT ? &previous : &next), carte);
|
||||
if(!empilerPileCartes((action == ZOOM_NEXT ? &previous : &next), carte))
|
||||
{
|
||||
/* AFFICHER UN MESSAGE CAR IMPOSSIBLE DE ZOOMER ??? */
|
||||
break;
|
||||
}
|
||||
|
||||
// La prochaine vue correspond donc à la dernière empilée dans les suivantes / précédentes
|
||||
carte = depilerPilesCartes((action == ZOOM_NEXT ? &next : &previous));
|
||||
|
Reference in New Issue
Block a user