diff options
| author | arngo <[email protected]> | 2023-05-26 16:12:34 -0400 |
|---|---|---|
| committer | arngo <[email protected]> | 2023-05-26 16:12:34 -0400 |
| commit | 33dc8e4cd4987a9f439767cf23812dce835fb4a5 (patch) | |
| tree | 0693b0414d017db677296e9f00c3f050677f7ac2 | |
| parent | a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c (diff) | |
| download | TOJam2023-33dc8e4cd4987a9f439767cf23812dce835fb4a5.tar.gz TOJam2023-33dc8e4cd4987a9f439767cf23812dce835fb4a5.zip | |
implement enemy bullet damage
| -rw-r--r-- | src/enemies.c | 31 | ||||
| -rw-r--r-- | src/enemies.h | 7 | ||||
| -rw-r--r-- | src/main.c | 4 |
3 files changed, 42 insertions, 0 deletions
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); @@ -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 |
