summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorarngo <[email protected]>2023-05-26 16:12:34 -0400
committerarngo <[email protected]>2023-05-26 16:12:34 -0400
commit33dc8e4cd4987a9f439767cf23812dce835fb4a5 (patch)
tree0693b0414d017db677296e9f00c3f050677f7ac2
parenta6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c (diff)
downloadTOJam2023-33dc8e4cd4987a9f439767cf23812dce835fb4a5.tar.gz
TOJam2023-33dc8e4cd4987a9f439767cf23812dce835fb4a5.zip
implement enemy bullet damage
-rw-r--r--src/enemies.c31
-rw-r--r--src/enemies.h7
-rw-r--r--src/main.c4
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);
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