From 0a9da8005875244b4bb583674212179ebc743b70 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 17 Feb 2023 01:24:57 +1100 Subject: [PATCH] Steering tweaks (#14140) - Fix the direct-path so NPCs. This is most noticeable when moving diagonally on planetmaps (given the current pathfinder is cardinal) - Reduce static collision avoidance weight and distance. This seems to reduce instances of getting stuck on railings. --- Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs | 4 ++-- Content.Server/NPC/Systems/NPCSteeringSystem.cs | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index 7edd2ac38f..5c655aa2ab 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -320,7 +320,7 @@ public sealed partial class NPCSteeringSystem EntityQuery bodyQuery, EntityQuery xformQuery) { - var detectionRadius = MathF.Max(1.5f, agentRadius); + var detectionRadius = MathF.Max(1f, agentRadius); foreach (var ent in _lookup.GetEntitiesInRange(uid, detectionRadius, LookupFlags.Static)) { @@ -364,7 +364,7 @@ public sealed partial class NPCSteeringSystem for (var i = 0; i < InterestDirections; i++) { var dot = Vector2.Dot(norm, Directions[i]); - danger[i] = MathF.Max(dot * weight, danger[i]); + danger[i] = MathF.Max(dot * weight * 0.9f, danger[i]); } } diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.cs index 1aa35066f6..e93f3a40a0 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.NPC; using Content.Shared.NPC.Events; +using Content.Shared.Physics; using Content.Shared.Weapons.Melee; using Robust.Server.Player; using Robust.Shared.Configuration; @@ -363,6 +364,7 @@ namespace Content.Server.NPC.Systems // This should also implicitly solve tie situations. // I think doing this after all the ops above is best? // Originally I had it way above but sometimes mobs would overshoot their tile targets. + if (steering.NextSteer > curTime) { SetDirection(mover, steering, steering.LastSteerDirection, false); @@ -396,7 +398,10 @@ namespace Content.Server.NPC.Systems // Short-circuit with no path. var targetPoly = _pathfindingSystem.GetPoly(steering.Coordinates); - if (targetPoly != null && steering.Coordinates.Position.Equals(Vector2.Zero) && _interaction.InRangeUnobstructed(steering.Owner, steering.Coordinates.EntityId)) + // If this still causes issues future sloth adjust the collision mask. + if (targetPoly != null && + steering.Coordinates.Position.Equals(Vector2.Zero) && + _interaction.InRangeUnobstructed(steering.Owner, steering.Coordinates.EntityId, range: 30f)) { steering.CurrentPath.Clear(); steering.CurrentPath.Enqueue(targetPoly); -- 2.52.0