501603261e
à chaque nouveaux zooms de zone
162 lines
3.3 KiB
C
162 lines
3.3 KiB
C
#include "carte.h"
|
|
|
|
|
|
void initialiserCarte(Carte *const carte)
|
|
{
|
|
if(carte != NULL)
|
|
{
|
|
carte->zoom = -1;
|
|
carte->type = FIRSTYPE + 1;
|
|
carte->echelle = -1.0;
|
|
carte->mapSprite = NULL;
|
|
carte->mapTexture = NULL;
|
|
carte->pointCentral = (Coordonnees){128, -256};
|
|
carte->pointHautGauche = (Coordonnees){128, -256};
|
|
carte->pointBasDroite = (Coordonnees){128, -256};
|
|
}
|
|
|
|
else
|
|
{
|
|
fprintf(stderr, "Erreur lors de l\'initialisation d\'une carte qui n\'existe pas.\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
}
|
|
|
|
|
|
void calculPointCentral(Carte *const carte)
|
|
{
|
|
if(carte != NULL)
|
|
{
|
|
// Coordonnées du point central du rectangle fictif
|
|
if(carte->pointHautGauche.lon <= carte->pointBasDroite.lon)
|
|
{
|
|
carte->pointCentral = (Coordonnees){(carte->pointHautGauche.lat + carte->pointBasDroite.lat) / 2.0, (carte->pointHautGauche.lon + carte->pointBasDroite.lon) / 2.0};
|
|
}
|
|
else
|
|
{
|
|
carte->pointCentral = (Coordonnees){(carte->pointHautGauche.lat + carte->pointBasDroite.lat) / 2.0, (carte->pointHautGauche.lon + 360 + carte->pointBasDroite.lon) / 2.0};
|
|
if(carte->pointCentral.lon>180)
|
|
{
|
|
carte->pointCentral.lon-=360;
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
fprintf(stderr, "Erreur lors du calcul du point central d\'une carte qui n\'existe pas (ou qui n'est pas initialisée).\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
}
|
|
|
|
|
|
void detruireCarte(Carte *const carte)
|
|
{
|
|
if(carte->mapTexture != NULL)
|
|
{
|
|
sfTexture_destroy(carte->mapTexture);
|
|
carte->mapTexture = NULL;
|
|
}
|
|
|
|
if(carte->mapSprite != NULL)
|
|
{
|
|
sfSprite_destroy(carte->mapSprite);
|
|
carte->mapSprite = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
Carte* creerCarte(const Carte *const oldCarte)
|
|
{
|
|
Carte *carte = calloc(1, sizeof(*carte));
|
|
|
|
if(carte == NULL)
|
|
{
|
|
fprintf(stderr, "Erreur lors de l\'allocation dynamique d\'une nouvelle carte.\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
if(oldCarte != NULL)
|
|
{
|
|
carte->zoom = oldCarte->zoom;
|
|
carte->type = oldCarte->type;
|
|
carte->echelle = oldCarte->echelle;
|
|
carte->mapSprite = NULL;
|
|
carte->mapTexture = NULL;
|
|
carte->pointCentral = oldCarte->pointCentral;
|
|
carte->pointHautGauche = oldCarte->pointHautGauche;
|
|
carte->pointBasDroite = oldCarte->pointBasDroite;
|
|
}
|
|
|
|
else
|
|
{
|
|
initialiserCarte(carte);
|
|
}
|
|
|
|
return carte;
|
|
}
|
|
|
|
|
|
void initialiserPileCartes(PileCartes *const pileCartes)
|
|
{
|
|
for(uint8_t i = 0; i < MAPSTACKSIZE; i++)
|
|
{
|
|
pileCartes->pile[i] = NULL;
|
|
}
|
|
|
|
pileCartes->sommet = -1;
|
|
}
|
|
|
|
|
|
void detruirePileCartes(PileCartes *const pileCartes)
|
|
{
|
|
for(uint8_t i = 0; i < MAPSTACKSIZE; i++)
|
|
{
|
|
if(pileCartes->pile[i] != NULL)
|
|
{
|
|
detruireCarte(pileCartes->pile[i]);
|
|
free(pileCartes->pile[i]);
|
|
pileCartes->pile[i] = NULL;
|
|
}
|
|
}
|
|
|
|
pileCartes->sommet = -1;
|
|
}
|
|
|
|
|
|
bool empilerPileCartes(PileCartes *const pileCartes, Carte *const carte)
|
|
{
|
|
if(pileCartes->sommet < MAPSTACKSIZE - 1)
|
|
{
|
|
pileCartes->pile[++pileCartes->sommet] = carte;
|
|
return true;
|
|
}
|
|
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
Carte* depilerPilesCartes(PileCartes *const pileCartes)
|
|
{
|
|
if(pileCartes->sommet >= 0)
|
|
{
|
|
Carte *tmp = pileCartes->pile[pileCartes->sommet];
|
|
pileCartes->pile[pileCartes->sommet--] = NULL;
|
|
return tmp;
|
|
}
|
|
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
inline void afficherWarningPile(sfRenderWindow *const window, const sfSprite *const renderSprite)
|
|
{
|
|
warningBox(window, renderSprite, "La carte précédente ne sera pas sauvegardée car la pile est pleine.");
|
|
}
|