1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*STRUCT DECORS*/
struct Decors
{
SDL_Surface ****surf;
SDL_Rect ***pos;
int **nb_decors;
};
typedef struct Decors Decors;
/*FONCTION DE DESTRUCTION*/
void nettoyer_decors(Decors *decors, int l_monde, int h_monde)
{
int i = 0, j = 0, k = 0;
for(i = 0 ; i < l_monde ; i ++)
{
for(j = 0 ; j < h_monde ; j ++)
{
for(k = 0 ; k < decors->nb_decors[i][j] ; k ++)
{
SDL_FreeSurface(decors->surf[i][j][k]);
}
free(decors->surf[i][j]);
free(decors->pos[i][j]);
}
free(decors->surf[i]);
free(decors->pos[i]);
free(decors->nb_decors[i]);
}
free(decors->surf);
free(decors->pos);
free(decors->nb_decors);
}
/*FONCTION DE CONSTRUCTION*/
void initialiser_decors(Decors *decors, int l_monde, int h_monde)
{
int i = 0, j = 0, k = 0;
char nom_all_decors[150];
dictionary *all_decors = NULL;
int nb_decors_carte = 0;
char sk[10] = "";
decors->surf = malloc(sizeof(*decors->surf) * l_monde); /*1ere dim...*/
decors->pos = malloc(sizeof(*decors->pos) * l_monde);
decors->nb_decors = malloc(sizeof(*decors->nb_decors) * l_monde);
if(decors->surf != NULL && decors->pos != NULL && decors->nb_decors != NULL)
{
for(i = 0 ; i < l_monde ; i ++)/*parcourir la 1ere dim...*/
{
decors->surf[i] = malloc(sizeof(**decors->surf) * h_monde);/*2eme dim*/
decors->pos[i] = malloc(sizeof(**decors->pos) * h_monde);
decors->nb_decors[i] = malloc(sizeof(**decors->nb_decors) * h_monde);
if(decors->surf[i] != NULL && decors->pos[i] != NULL && decors->nb_decors != NULL)
{
for(j = 0 ; j < h_monde ; j ++)/*parcourir la 2eme dim...*/
{
sprintf(nom_all_decors, "quetes/Q1/monde/%d-%d/decors.map", i, j);
all_decors = iniparser_load(nom_all_decors);
nb_decors_carte = iniparser_getint(all_decors, "settings:nb", 0);
decors->nb_decors[i][j] = nb_decors_carte;
decors->surf[i][j] = malloc(sizeof(***decors->surf) * nb_decors_carte);
decors->pos[i][j] = malloc(sizeof(***decors->pos) * nb_decors_carte);
if(decors->surf[i][j] != NULL && decors->pos[i][j] != NULL)
{
for(k = 0 ; k < nb_decors_carte ; k ++)
{
sprintf(sk, "D%d:img", k);
decors->surf[i][j][k] = IMG_Load(iniparser_getstr(all_decors, sk));
sprintf(sk, "D%d:x", k);
decors->pos[i][j][k].x = iniparser_getint(all_decors, sk, 0);
sprintf(sk, "D%d:y", k);
decors->pos[i][j][k].y = iniparser_getint(all_decors, sk, 0);
}
}
iniparser_freedict(all_decors);
}
}
}
}
} |
Partager