From bc8f3dc0b0b95db31c3bd4dae13602cd138e905e Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 25 Dec 2022 11:35:00 +1100 Subject: [PATCH] Fix some NPC dancing (#13177) - Bump the collision avoidance range, seemed okay compared to last time I tried. Means they shouldn't get caught by thindows - Removed the steer frequency because I'm pretty sure that lead to dancing in some instances. --- .../NPC/Components/NPCSteeringComponent.cs | 14 -------------- Content.Server/NPC/Systems/NPCSteeringSystem.cs | 9 +++------ 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/Content.Server/NPC/Components/NPCSteeringComponent.cs b/Content.Server/NPC/Components/NPCSteeringComponent.cs index 34b4e7b79b..98f10311ea 100644 --- a/Content.Server/NPC/Components/NPCSteeringComponent.cs +++ b/Content.Server/NPC/Components/NPCSteeringComponent.cs @@ -36,20 +36,6 @@ public sealed class NPCSteeringComponent : Component #endregion - /// - /// How many times per second we're allowed to update our steering frequency. - /// - public const byte SteerFrequency = 10; - - /// - /// Last time the NPC steered. - /// - [ViewVariables] - public TimeSpan LastTimeSteer; - - [ViewVariables] - public Vector2 LastSteer; - /// /// Have we currently requested a path. /// diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.cs index db2105d394..0dc82f8d83 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.cs @@ -216,7 +216,6 @@ namespace Content.Server.NPC.Systems var (steering, _, mover, xform) = npcs[i]; Steer(steering, mover, xform, modifierQuery, bodyQuery, xformQuery, frameTime); - steering.LastSteer = mover.CurTickSprintMovement; }); @@ -287,8 +286,7 @@ namespace Content.Server.NPC.Systems return; } - // TODO: Pause time - // Need it on the paused event which needs an engine PR. + /* If you wish to not steer every tick A) Add pause support B) fix overshoots to prevent dancing var nextSteer = steering.LastTimeSteer + TimeSpan.FromSeconds(1f / NPCSteeringComponent.SteerFrequency); if (nextSteer > _timing.CurTime) @@ -296,8 +294,8 @@ namespace Content.Server.NPC.Systems SetDirection(mover, steering, steering.LastSteer, false); return; } + */ - steering.LastTimeSteer = _timing.CurTime; var uid = mover.Owner; var interest = steering.Interest; var danger = steering.Danger; @@ -309,7 +307,6 @@ namespace Content.Server.NPC.Systems var offsetRot = -_mover.GetParentGridAngle(mover); modifierQuery.TryGetComponent(uid, out var modifier); var moveSpeed = GetSprintSpeed(steering.Owner, modifier); - var tickMove = moveSpeed * frameTime; var body = bodyQuery.GetComponent(uid); var dangerPoints = steering.DangerPoints; dangerPoints.Clear(); @@ -331,7 +328,7 @@ namespace Content.Server.NPC.Systems DebugTools.Assert(!float.IsNaN(interest[0])); // Avoid static objects like walls - CollisionAvoidance(uid, offsetRot, worldPos, agentRadius, tickMove, layer, mask, xform, danger, dangerPoints, bodyQuery, xformQuery); + CollisionAvoidance(uid, offsetRot, worldPos, agentRadius, moveSpeed, layer, mask, xform, danger, dangerPoints, bodyQuery, xformQuery); DebugTools.Assert(!float.IsNaN(danger[0])); Separation(uid, offsetRot, worldPos, agentRadius, layer, mask, body, xform, danger, bodyQuery, xformQuery);