diff options
Diffstat (limited to 'world.c')
-rw-r--r-- | world.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -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); |