summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorarngo <[email protected]>2023-05-27 17:24:48 -0400
committerarngo <[email protected]>2023-05-27 17:24:48 -0400
commitf04473c97a6b95a798924b847086145cf5726012 (patch)
tree5f5aa83f522fd16c2a4e70a004e87a1268f8ca1f
parent3a52c0738c3616b6974f0c979086ee1ca215ae08 (diff)
downloadTOJam2023-f04473c97a6b95a798924b847086145cf5726012.tar.gz
TOJam2023-f04473c97a6b95a798924b847086145cf5726012.zip
bullet-wall collisions
-rw-r--r--src/bullet.c27
-rw-r--r--src/bullet.h8
-rw-r--r--src/enemies.c3
-rw-r--r--src/main.c1
4 files changed, 39 insertions, 0 deletions
diff --git a/src/bullet.c b/src/bullet.c
index 8fca4af..89572dc 100644
--- a/src/bullet.c
+++ b/src/bullet.c
@@ -2,6 +2,7 @@
#include "input.h"
#include "player.h"
#include "bullet.h"
+#include "wall.h"
#include "rodeo/collision.h"
static rodeo_texture_2d_t bullet_texture;
@@ -138,3 +139,29 @@ get_player_bullet_world(void)
{
return &player_bullet_collision_world;
}
+
+void
+bullet_destroy(
+ cvec_bullet_t_value* bullet
+)
+{
+ rodeo_collision_2d_world_item_destroy_by_id(bullet->id);
+ *bullet = *cvec_bullet_t_back(&bullets);
+ cvec_bullet_t_pop(&bullets);
+}
+
+void bullet_wall_resolver(
+ rodeo_collision_2d_world_item_t *bullet_collision,
+ rodeo_collision_2d_world_item_t *wall_collision
+)
+{
+ bullet_t *bullet= get_bullet_by_id(bullet_collision->id);
+ if (bullet == NULL) { return; }
+ bullet_destroy(bullet);
+}
+
+void
+detect_bullet_wall_collisions(void)
+{
+ rodeo_collision_2d_world_compare_other(&player_bullet_collision_world, get_wall_world(), bullet_wall_resolver);
+}
diff --git a/src/bullet.h b/src/bullet.h
index 3438291..e335d7d 100644
--- a/src/bullet.h
+++ b/src/bullet.h
@@ -47,3 +47,11 @@ get_enemy_bullet_world(void);
rodeo_collision_2d_world_t *
get_player_bullet_world(void);
+
+void
+bullet_destroy(
+ cvec_bullet_t_value* bullet
+);
+
+void
+detect_bullet_wall_collisions(void);
diff --git a/src/enemies.c b/src/enemies.c
index 3779cb5..b83be03 100644
--- a/src/enemies.c
+++ b/src/enemies.c
@@ -2,6 +2,7 @@
#include "bullet.h"
#include "cglm/vec2.h"
#include "player.h"
+#include "bullet.h"
static rodeo_collision_2d_world_t collision_enemies_world = {0};
static rodeo_texture_2d_t enemy_texture;
@@ -202,6 +203,8 @@ damage_enemy_resolver(
)
{
rodeo_collision_2d_world_item_destroy(bullet_collision);
+ bullet_t *bullet = get_bullet_by_id(bullet_collision->id);
+ bullet_destroy(bullet);
enemy_t *enemy = get_enemy_by_id(enemy_collision->id);
if(enemy == NULL) { return; }
enemy->hp -= 10;
diff --git a/src/main.c b/src/main.c
index 61b1b08..ac517de 100644
--- a/src/main.c
+++ b/src/main.c
@@ -198,6 +198,7 @@ main_loop(void)
draw_player();
draw_enemies();
detect_bullet_enemy_collisions();
+ detect_bullet_wall_collisions();
detect_player_enemy_collisions();
detect_player_wall_collisions();