From 539c482cff459ce6e2c51d57a1e40a26d6a44d42 Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Tue, 16 Aug 2022 12:49:50 +0100 Subject: [PATCH] Capped out NPC movement at higher dts --- rtsim/src/rule/simulate_npcs.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/rtsim/src/rule/simulate_npcs.rs b/rtsim/src/rule/simulate_npcs.rs index e1fb91f856..b761f35599 100644 --- a/rtsim/src/rule/simulate_npcs.rs +++ b/rtsim/src/rule/simulate_npcs.rs @@ -23,13 +23,15 @@ impl Rule for SimulateNpcs { // Move NPCs if they have a target if let Some((target, speed_factor)) = npc.target { - npc.wpos += Vec3::from( - (target.xy() - npc.wpos.xy()) - .try_normalized() - .unwrap_or_else(Vec2::zero) - * body.max_speed_approx() - * speed_factor, - ) * ctx.event.dt; + let diff = target.xy() - npc.wpos.xy(); + let dist2 = diff.magnitude_squared(); + + if dist2 > 0.5.powi(2) { + npc.wpos += (diff + * (body.max_speed_approx() * speed_factor * ctx.event.dt / dist2.sqrt()) + .min(1.0)) + .with_z(0.0); + } } // Make sure NPCs remain on the surface