summaryrefslogtreecommitdiff
path: root/src/zombies.c
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-12-15 20:51:04 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2022-12-15 20:51:04 +0100
commit24a44e57ab9adbb353adac8b83c4441e7adb3751 (patch)
treeeeb3cfa750ec336012fa494673c814c20abf1a59 /src/zombies.c
parentf646069ca3baab4021e85de2ba19ce5f57e204fd (diff)
work
Diffstat (limited to 'src/zombies.c')
-rw-r--r--src/zombies.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/zombies.c b/src/zombies.c
index 76c5267..8289ad4 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -40,7 +40,7 @@ void spawn_zombie(int x, int y) {
player closest_player = get_closest_player_to_tile(x, y);
- make_pathfinding_request((vec2f){x,y}, (vec2f){closest_player.playerx, closest_player.playery}, &zombies[i].path, &zombies[i].request);
+ make_pathfinding_request((vec2f){x,y}, (vec2f){closest_player.playerx, closest_player.playery}, &zombies[i].next_path, &zombies[i].request);
break;
}
}
@@ -157,6 +157,21 @@ void update_zombies_client(platform_window* window) {
}
}
+static vec2f get_random_point_around_player(player p, zombie o) {
+ // Convert from degrees to radians via multiplication by PI/180
+
+ try_again:;
+ float radius = 0.8f, angleInDegrees = (rand() % 360);
+ vec2f origin = (vec2f){o.position.x, o.position.y};
+ float x = (float)(radius * cos(angleInDegrees * M_PI / 180.0f)) + p.playerx;
+ float y = (float)(radius * sin(angleInDegrees * M_PI / 180.0f)) + p.playery;
+
+ object obj = get_object_at_tile(x, y);
+ if (obj.active) goto try_again;
+
+ return (vec2f){x, y};
+}
+
void update_zombies_server(platform_window* window) {
float speed = 0.05f;
@@ -167,9 +182,9 @@ void update_zombies_server(platform_window* window) {
zombies[i].time_since_last_path += update_delta;
if (zombies[i].time_since_last_path > 0.05f) {
player closest_player = get_closest_player_to_tile((int)o.position.x, (int)o.position.y);
- make_pathfinding_request((vec2f){o.position.x,o.position.y},
- (vec2f){closest_player.playerx, closest_player.playery + get_player_size_in_tile()},
- &zombies[i].next_path, &zombies[i].request);
+ vec2f target_tile = (vec2f){closest_player.playerx, closest_player.playery+(get_player_size_in_tile()/2)};
+
+ make_pathfinding_request((vec2f){o.position.x,o.position.y}, target_tile, &zombies[i].next_path, &zombies[i].request);
zombies[i].time_since_last_path = 0;
}
else {
@@ -177,8 +192,12 @@ void update_zombies_server(platform_window* window) {
{
if (zombies[i].request.to_fill->length) {
array_destroy(&zombies[i].path);
- zombies[i].path = array_copy(&zombies[i].next_path);
- array_clear(&zombies[i].next_path);
+ zombies[i].path = array_copy(zombies[i].request.to_fill);
+
+ player closest_player = get_closest_player_to_tile((int)o.position.x, (int)o.position.y);
+ vec2f final_pos = get_random_point_around_player(closest_player, zombies[i]);
+ array_push_at(&zombies[i].path, (u8*)&final_pos, 0);
+ array_clear(zombies[i].request.to_fill);
}
}
mutex_unlock(&zombies[i].request.mutex);