diff options
author | quou <quou@disroot.org> | 2024-09-30 22:13:31 +1000 |
---|---|---|
committer | quou <quou@disroot.org> | 2024-09-30 22:13:31 +1000 |
commit | ee655819d44307d974fb27e1fa04d079a3810d63 (patch) | |
tree | faa7c7c833dab0ed83dece311576b53bd2e4b840 /world.c | |
parent | de9a4fd93343d4654dfe7e2a566704644a9f306f (diff) |
enemy
Diffstat (limited to 'world.c')
-rw-r--r-- | world.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -3,6 +3,8 @@ void init_world(World* w) { w->particle_count = 0; + w->enemy_count = 0; + w->deathzone_count = 0; init_player(&w->player); } @@ -20,12 +22,47 @@ Particle* inst_particle( return p; } +Enemy* inst_enemy( + World* w, + Enemy_Type t, + int x, + int y +) { + Enemy* e; + assert(w->enemy_count < max_enemies); + e = &w->enemies[w->enemy_count++]; + init_enemy(e, t, x, y); + return e; +} + +Deathzone* inst_deathzone( + World* w, + const Rect* r, + int vx, + int vy, + int hp, + int life, + int friendly +) { + Deathzone* d; + assert(w->deathzone_count < max_deathzones); + d = &w->deathzones[w->deathzone_count++]; + init_deathzone(d, r, vx, vy, hp, life, friendly); + return d; +} + void update_world(World* w, const App* a) { int i; update_player(&w->player, w, a, &w->map); for (i = w->particle_count - 1; i >= 0; i--) if (update_particle(&w->particles[i])) w->particles[i] = w->particles[--w->particle_count]; + 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->deathzone_count - 1; i >= 0; i--) + if (update_deathzone(&w->deathzones[i])) + w->deathzones[i] = w->deathzones[--w->deathzone_count]; } void ren_world(const World* w, struct Renderer* r) { @@ -34,4 +71,6 @@ void ren_world(const World* w, struct Renderer* r) { render_map(&w->map, r); for (i = 0; i < w->particle_count; i++) ren_particle(&w->particles[i], r); + for (i = 0; i < w->enemy_count; i++) + ren_enemy(&w->enemies[i], r); } |