From 29b6af55929c8fdf2954e8be62f1da30a0a8aace Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Fri, 17 Jul 2026 02:50:47 +0300 Subject: [PATCH] implement random wandering --- src/app.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/app.zig b/src/app.zig index 83a7878..1f49ade 100644 --- a/src/app.zig +++ b/src/app.zig @@ -165,6 +165,8 @@ const Entity = struct { minion_throw_cooldown: Nanoseconds = 0, minion_carried_wood_head: ?EntityId = null, minion_carried_wood_len: u32 = 0, + minion_wander_target: ?Vec2 = null, + minion_wander_cooldown: Nanoseconds = 0, tree_health: u32 = 0, tree_max_health: u32 = 0, @@ -606,6 +608,25 @@ fn minionLogic(self: *App, plt: Platform.Frame, minion_id: EntityId) !void { switch (minion.minion_state) { .wander => { + if (minion.minion_wander_cooldown == 0) { + const rand = self.prng.random(); + minion.minion_wander_cooldown = rand.intRangeAtMost(Nanoseconds, 1000, 3000) * std.time.ns_per_ms; + // TODO: Add limits/walls + minion.minion_wander_target = .init( + minion.pos.x + ((rand.float(f32)-0.5)*2) * 200, + 0, + ); + } + + if (minion.minion_wander_target) |target| { + if (minion.pos.distance(target) < goal_distance) { + minion.minion_wander_cooldown = @max(minion.minion_wander_cooldown - plt.dt, 0); + } + } else { + minion.minion_wander_cooldown = 0; + } + + walk_goal = minion.minion_wander_target; }, .goto_tree_station => { if (minion.target_entity) |tree_station_id| {