aboutsummaryrefslogtreecommitdiff
path: root/world.c
diff options
context:
space:
mode:
authorquou <quou@disroot.org>2024-10-08 19:56:08 +1100
committerquou <quou@disroot.org>2024-10-08 19:56:08 +1100
commit9add408984464bd6b3cc018bb14c3d69ad0a2898 (patch)
treedde2af5525fd076d03c5c8e14067a4502aa1051e /world.c
parentb5c69695c9c97c09f7ffa4d5a600d88cc06ee6da (diff)
New flying enemy that drops arrows
Diffstat (limited to 'world.c')
-rw-r--r--world.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/world.c b/world.c
index 52e2c5a..8d34b21 100644
--- a/world.c
+++ b/world.c
@@ -6,6 +6,7 @@ void init_world(World* w) {
w->enemy_count = 0;
w->deathzone_count = 0;
w->effect_count = 0;
+ w->projectile_count = 0;
w->frame = 0;
w->freeze = 0;
init_player(&w->player);
@@ -70,6 +71,20 @@ Effect* inst_effect(
return e;
}
+Projectile* inst_projectile(
+ World* w,
+ int x,
+ int y,
+ const Rect* r,
+ int anim
+) {
+ Projectile* p;
+ assert(w->projectile_count < max_projectiles);
+ p = &w->projectiles[w->projectile_count++];
+ init_projectile(p, x, y, r, anim);
+ return p;
+}
+
void update_world(World* w, const App* a) {
int i;
if (w->laser.life)
@@ -91,6 +106,9 @@ void update_world(World* w, const App* a) {
for (i = w->enemy_count - 1; i >= 0; i--)
if (update_enemy(&w->enemies[i], w))
w->enemies[i] = w->enemies[--w->enemy_count];
+ for (i = w->projectile_count - 1; i >= 0; i--)
+ if (update_projectile(&w->projectiles[i], w))
+ w->projectiles[i] = w->projectiles[--w->projectile_count];
w->frame++;
}
@@ -104,6 +122,8 @@ void ren_world(const World* w, struct Renderer* r) {
ren_effect(&w->effects[i], r);
for (i = 0; i < w->enemy_count; i++)
ren_enemy(&w->enemies[i], r);
+ for (i = 0; i < w->projectile_count; i++)
+ ren_projectile(&w->projectiles[i], r);
if (w->laser.life)
ren_laser(&w->laser, r);
ren_hud(w, r);