From 33dc8e4cd4987a9f439767cf23812dce835fb4a5 Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Fri, 26 May 2023 16:12:34 -0400 Subject: implement enemy bullet damage --- src/enemies.c | 31 +++++++++++++++++++++++++++++++ src/enemies.h | 7 +++++++ src/main.c | 4 ++++ 3 files changed, 42 insertions(+) diff --git a/src/enemies.c b/src/enemies.c index 8c1f71c..a8705ed 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -1,4 +1,5 @@ #include "enemies.h" +#include "bullet.h" static rodeo_collision_2d_world_t collision_enemies_world; static rodeo_texture_2d_t enemy_texture; @@ -77,3 +78,33 @@ get_enemies_cvec(void) { return enemies; } + +void enemy_destroy( + cvec_enemy_t_value* enemy +) +{ + rodeo_collision_2d_world_item_destroy_by_id(enemy->id); + *enemy = *cvec_enemy_t_back(&enemies); + cvec_enemy_t_pop(&enemies); + +} + +void +damage_enemy_resolver( + rodeo_collision_2d_world_item_t *enemy_collision, + rodeo_collision_2d_world_item_t *bullet_collision +) +{ + rodeo_collision_2d_world_item_destroy(bullet_collision); + enemy_t *enemy = get_enemy_by_id(enemy_collision->id); + enemy->hp -= 10; + if (enemy->hp <= 0) { + enemy_destroy(enemy); + } +} + +void +detect_bullet_enemy_collisions(void) +{ + rodeo_collision_2d_world_compare_other(&collision_enemies_world, get_player_bullet_world(), damage_enemy_resolver); +} diff --git a/src/enemies.h b/src/enemies.h index 0b0d908..b5cc916 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -39,3 +39,10 @@ get_enemies_world(void); cvec_enemy_t get_enemies_cvec(void); + +void enemy_destroy( + cvec_enemy_t_value* enemy +); + +void +detect_bullet_enemy_collisions(void); diff --git a/src/main.c b/src/main.c index d928615..1078f46 100644 --- a/src/main.c +++ b/src/main.c @@ -188,6 +188,7 @@ main_loop(void) draw_bullets(); draw_player(); draw_enemies(); + detect_bullet_enemy_collisions(); rodeo_debug_text_draw( 1, @@ -270,6 +271,9 @@ main(void) init_player(); init_enemies(); spawn_enemy(240, 240); + spawn_enemy(100, 100); + spawn_enemy(300, 100); + spawn_enemy(200, 330); rodeo_mainLoop_run( main_loop -- cgit v1.2.3