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.
This commit is contained in:
metalgearsloth
2022-12-25 11:35:00 +11:00
committed by GitHub
parent f5b4cadd22
commit bc8f3dc0b0
2 changed files with 3 additions and 20 deletions

View File

@@ -36,20 +36,6 @@ public sealed class NPCSteeringComponent : Component
#endregion
/// <summary>
/// How many times per second we're allowed to update our steering frequency.
/// </summary>
public const byte SteerFrequency = 10;
/// <summary>
/// Last time the NPC steered.
/// </summary>
[ViewVariables]
public TimeSpan LastTimeSteer;
[ViewVariables]
public Vector2 LastSteer;
/// <summary>
/// Have we currently requested a path.
/// </summary>

View File

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