From 07eb16ba4602c41de86236e0870c757da3bfb5d6 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 16 May 2024 11:42:03 +0200 Subject: zombie despawning and more spawners --- src/players.c | 2 +- src/zombies.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/players.c b/src/players.c index b4b744d..b5d0666 100644 --- a/src/players.c +++ b/src/players.c @@ -128,7 +128,7 @@ void add_points_to_player(player* p, u32 points) { void move_user(platform_window* window, u32 id, protocol_move_type move, float delta) { - float speed_straight = 15.5f; + float speed_straight = 5.5f; float speed = speed_straight * delta; float pad_between_player_and_obj = 0.01f; diff --git a/src/zombies.c b/src/zombies.c index 1e3e05b..3bad715 100644 --- a/src/zombies.c +++ b/src/zombies.c @@ -183,7 +183,26 @@ void spawn_zombie(int x, int y) { } } +static void despawn_far_zombies_server() +{ + for (int i = 0; i < SERVER_MAX_ZOMBIES; i++) { + zombie o = zombies[i]; + if (!o.alive) continue; + + float dist = 0.0f; + player p = get_closest_player_to_tile_x(o.position.x, o.position.y, &dist); + if (dist >= MAX_DISTANCE_BETWEEN_ZOMBIE_AND_PLAYER) + { + zombies[i].alive = 0; + _current_round.zombies++; + log_infox("Despawned zombie %d", i); + } + } +} + void update_spawners_server() { + despawn_far_zombies_server(); + for (int x = 0; x < MAX_SPAWNERS; x++) { spawner spawner = spawner_tiles[x]; if (!spawner.active) continue; @@ -191,6 +210,13 @@ void update_spawners_server() { spawner_tiles[x].sec_since_last_spawn += SERVER_TICK_RATE; if (zombies_left_in_current_round() <= 0) continue; if (spawner_tiles[x].sec_since_last_spawn >= 1.0f) { + + float dist = 0.0f; + player p = get_closest_player_to_tile_x(spawner.position.x, spawner.position.y, &dist); + if (dist >= MAX_DISTANCE_BETWEEN_ZOMBIE_AND_PLAYER) { + continue; + } + spawn_zombie(spawner.position.x, spawner.position.y); spawner_tiles[x].sec_since_last_spawn = 0; } -- cgit v1.2.3-70-g09d2