summaryrefslogtreecommitdiffhomepage
path: root/src/enemies.c
diff options
context:
space:
mode:
authorArnold <[email protected]>2023-05-28 12:56:19 -0400
committerGitHub <[email protected]>2023-05-28 12:56:19 -0400
commitad60e242e2d432b436de79ffeb76637e62b057d8 (patch)
treedb7e76c4e12c21c85de45e2e948419c5d2d8851c /src/enemies.c
parentfed9c87269db74d70cd5262804873bc875543abe (diff)
downloadrodeo_sample_game-ad60e242e2d432b436de79ffeb76637e62b057d8.tar.gz
rodeo_sample_game-ad60e242e2d432b436de79ffeb76637e62b057d8.zip
implement random enemy spawning
Diffstat (limited to 'src/enemies.c')
-rw-r--r--src/enemies.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/enemies.c b/src/enemies.c
index 19e1c3e..ad09e68 100644
--- a/src/enemies.c
+++ b/src/enemies.c
@@ -3,10 +3,12 @@
#include "cglm/vec2.h"
#include "player.h"
#include "bullet.h"
+#include "wall.h"
static rodeo_collision_2d_world_t collision_enemies_world = {0};
static rodeo_texture_2d_t enemy_texture;
static cvec_enemy_t enemies = {0};
+static float spawn_cooldown = 0;
void
init_enemies(void)
@@ -253,3 +255,33 @@ group_follow_target(rodeo_collision_2d_world_item_t *target)
enemy->dy = result[1];
}
}
+
+enemy_t*
+random_enemy_create(
+ rodeo_rectangle_t bounds
+)
+{
+ float spawn_coords[2];
+ for (int i = 0; i < 100; ++i) {
+ spawn_coords[0] = (float)rodeo_random_double_get() * bounds.width + bounds.x;
+ spawn_coords[1] = (float)rodeo_random_double_get() * bounds.height + bounds.y;
+ if (!coords_inside_wall(spawn_coords[0], spawn_coords[1])) {
+ return spawn_enemy(spawn_coords[0], spawn_coords[1]);
+ }
+ }
+ rodeo_log(rodeo_logLevel_info, "failed to spawn enemy");
+ return NULL;
+}
+
+enemy_t*
+attempt_random_enemy_spawn(
+ rodeo_rectangle_t bounds
+)
+{
+ spawn_cooldown -= rodeo_frame_time_get();
+ if (spawn_cooldown <= 0) {
+ spawn_cooldown += (float)rodeo_random_double_get() * 5000.0f + 1500.0f;
+ return random_enemy_create(bounds);
+ }
+ return NULL;
+}