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);