Fix' un bug lors de l'empilement + prise en compte du cas de PILE PLEINE

This commit is contained in:
HorlogeSkynet
2017-01-06 19:43:08 +01:00
parent e122569445
commit 385a354ca6
3 changed files with 17 additions and 9 deletions

@ -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));