diff --git a/code/display.c b/code/display.c index a8e24792e8ca1696d21867da7b1ceb8f9928882f..457067fe09a850b181821ceaca37c5861595793e 100644 --- a/code/display.c +++ b/code/display.c @@ -192,18 +192,23 @@ void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, wor } } -void clear_enemies_ressources() +void clear_enemies_ressources(resources_t *resources) { - + free(resources->enemies); } -void destroy_textures(resources_t *resources) +void destroy_textures(resources_t *resources, world_t *world) { SDL_DestroyTexture(resources->background); SDL_DestroyTexture(resources->soldier_idle_left); SDL_DestroyTexture(resources->soldier_aim_up_left); SDL_DestroyTexture(resources->soldier_crouch_left); + + SDL_DestroyTexture(resources->soldier_idle_right); + SDL_DestroyTexture(resources->soldier_aim_up_right); + SDL_DestroyTexture(resources->soldier_crouch_right); + for(int i = 0; i < 10; i++) { SDL_DestroyTexture(resources->soldier_run_left[i]); @@ -212,9 +217,10 @@ void destroy_textures(resources_t *resources) SDL_DestroyTexture(resources->soldier_jump_right[i]); } - SDL_DestroyTexture(resources->soldier_idle_right); - SDL_DestroyTexture(resources->soldier_aim_up_right); - SDL_DestroyTexture(resources->soldier_crouch_right); + for (int i = 0; i < world->rounds.number_enemies; ++i) + { + SDL_DestroyTexture(resources->enemies[i]); + } SDL_DestroyTexture(resources->bullet); SDL_DestroyTexture(resources->enemy); diff --git a/code/display.h b/code/display.h index a4b5c98b2ccf203295721e00ae9d386d731e1889..8a23c758eeedecfc935bf050c16629f1d0618a77 100644 --- a/code/display.h +++ b/code/display.h @@ -46,9 +46,9 @@ void init_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *wo void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *world); -void clear_enemies_ressources(); +void clear_enemies_ressources(resources_t *resources); -void destroy_textures(resources_t *resources); +void destroy_textures(resources_t *resources, world_t *world); //void rotate_right(SDL_Renderer *renderer, world_t *world,resources_t *resources); diff --git a/code/enemy.c b/code/enemy.c index 4851fce9b562fa695c97d98a6599d739627a66bd..030e7735f66cf395c87fc645fd39d6f3a4a0d069 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -22,7 +22,7 @@ void init_enemy(enemy_t *enemy) }else{ init_enemyType4(enemy); } - enemy->is_moving = 1; + enemy->is_moving = 0; } void init_enemyType1(enemy_t *enemy) diff --git a/code/main.c b/code/main.c index b0fdccf248bf052af93ccf12d5e1aa836489708d..fe7a801e18b5b9669f78517bcdf10084179d063e 100644 --- a/code/main.c +++ b/code/main.c @@ -88,7 +88,7 @@ int main(void) SDL_RenderPresent(renderer); } // Quitter SDL - destroy_textures(&resources); + destroy_textures(&resources,&world); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); diff --git a/code/round_management.c b/code/round_management.c index 03eacdd37de25b08889a86ce329467b6471e85b5..745cc90c56988aa48adf7bc3d33066fdf06e99da 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -14,9 +14,16 @@ void save_game() }*/ -int isRoundEnded() +int isRoundEnded(round_t *round) { - return 0; + for (int i = 0; i < round->number_enemies; ++i) + { + if(round->enemies[i].sprite.is_visible == 1) + { + return 0; + } + } + return 1; } @@ -26,16 +33,27 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation) round->round_number = 0; round->number_enemies = nbEnemies; round->incrementation = incrementation; + round->counter = 0; + round->index_to_spawn = 0; createEnemies(round); } //Actualiser qui se déplace void updateRound(round_t *round) { - + if(round->counter == 0) + { + round->enemies[round->index_to_spawn].is_moving = 1; + round->index_to_spawn++; + } + round->counter++; + if(round->counter == 500) + { + round->counter = 0; + } } -void nextRound(round_t *roun) +void nextRound(round_t *round) { } @@ -50,7 +68,7 @@ void createEnemies(round_t *round) } } -void clearEnemies() +void clearEnemies(round_t *round) { - + free(round->enemies); } \ No newline at end of file diff --git a/code/round_management.h b/code/round_management.h index e2b88c82b5554b7b0c014354b23282554da66e5e..f764ef84087ebcef88a6f40111ae1d5aef6f47e8 100644 --- a/code/round_management.h +++ b/code/round_management.h @@ -9,6 +9,8 @@ struct round_s int incrementation; //Nombre d'ennemis en + à chaque round int number_enemies; //Nombre d'ennemis actuel dans la manche enemy_t *enemies; //Tableau d'ennemis + int counter; //Compteur entre chaque apparition des ennemis + int index_to_spawn; //Index pour savoir quel ennemi doit apparaitre }; /** * \brief Type qui correspond au round @@ -16,7 +18,7 @@ struct round_s typedef struct round_s round_t; -int isRoundEnded(); +int isRoundEnded(round_t *round); void initFirstRound(round_t *round, int nbEnemies, int incrementation); @@ -26,6 +28,6 @@ void nextRound(round_t *round); void createEnemies(round_t *round); -void clearEnemies(); +void clearEnemies(round_t *round); #endif \ No newline at end of file diff --git a/code/world_data.c b/code/world_data.c index a25a0faf3443e04233ffbaf0a8c8a43f3e5fbfae..b74126a7e734cd6b46ea4a00a1088cc52cf64b70 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -91,23 +91,27 @@ void refresh_data(world_t *world) //Si la manche n'est pas finie - if(isRoundEnded() == 0) + if(isRoundEnded(&world->rounds) == 0) { updateRound(&world->rounds); for (int i = 0; i < world->rounds.number_enemies ; i++) { - enemy_walk(&world->rounds.enemies[i],&world->soldier); - world->rounds.enemies[i].DestEnemy.x = world->rounds.enemies[i].sprite.x; - world->rounds.enemies[i].DestEnemy.y = world->rounds.enemies[i].sprite.y; - //Si l'ennemi touche le soldat - //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); - enemy_dead(&world->rounds.enemies[i],&world->soldier); + if(world->rounds.enemies[i].is_moving == 1) + { + enemy_walk(&world->rounds.enemies[i],&world->soldier); + world->rounds.enemies[i].DestEnemy.x = world->rounds.enemies[i].sprite.x; + world->rounds.enemies[i].DestEnemy.y = world->rounds.enemies[i].sprite.y; + //Si l'ennemi touche le soldat + //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); + enemy_dead(&world->rounds.enemies[i],&world->soldier); + } } } //Sinon si la manche est finie, manche suivante else { nextRound(&world->rounds); + //printf("gg ta gagné"); //Charger le bon nombre de texture } @@ -170,6 +174,7 @@ void handle_events(SDL_Event *event,world_t *world) //On indique la fin du jeu //Libère la mémoire du tableau DestBullet pour l'affichage free(world->soldier.DestBullet); + clearEnemies(&world->rounds); world->gameover = 1; }