diff --git a/Content.Server/NPC/Components/NPCSteeringComponent.cs b/Content.Server/NPC/Components/NPCSteeringComponent.cs
index 4ca90e73fb..84ae5d3b56 100644
--- a/Content.Server/NPC/Components/NPCSteeringComponent.cs
+++ b/Content.Server/NPC/Components/NPCSteeringComponent.cs
@@ -36,7 +36,7 @@ public sealed class NPCSteeringComponent : Component
///
/// How far does the last node in the path need to be before considering re-pathfinding.
///
- [ViewVariables(VVAccess.ReadWrite)] public float RepathRange = 1.2f;
+ [ViewVariables(VVAccess.ReadWrite)] public float RepathRange = 1.5f;
public const int FailedPathLimit = 3;
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleComponentOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleComponentOperator.cs
index 464dc8eef4..174f9559dc 100644
--- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleComponentOperator.cs
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleComponentOperator.cs
@@ -85,7 +85,6 @@ public sealed class PickAccessibleComponentOperator : HTNOperator
{
var path = await _pathfinding.GetRandomPath(
owner,
- 1.4f,
maxRange,
cancelToken,
flags: _pathfinding.GetFlags(blackboard));
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleOperator.cs
index d73e9d7649..70efa83be8 100644
--- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleOperator.cs
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/PickAccessibleOperator.cs
@@ -45,7 +45,6 @@ public sealed class PickAccessibleOperator : HTNOperator
var path = await _pathfinding.GetRandomPath(
owner,
- 1.4f,
maxRange,
cancelToken,
flags: _pathfinding.GetFlags(blackboard));
diff --git a/Content.Server/NPC/Pathfinding/PathRequest.cs b/Content.Server/NPC/Pathfinding/PathRequest.cs
index 7df2c02818..43e4773e3a 100644
--- a/Content.Server/NPC/Pathfinding/PathRequest.cs
+++ b/Content.Server/NPC/Pathfinding/PathRequest.cs
@@ -33,17 +33,15 @@ public abstract class PathRequest
#region Data
public readonly PathFlags Flags;
- public readonly float Range;
public readonly int CollisionLayer;
public readonly int CollisionMask;
#endregion
- public PathRequest(EntityCoordinates start, PathFlags flags, float range, int layer, int mask, CancellationToken cancelToken)
+ public PathRequest(EntityCoordinates start, PathFlags flags, int layer, int mask, CancellationToken cancelToken)
{
Start = start;
Flags = flags;
- Range = range;
CollisionLayer = layer;
CollisionMask = mask;
Tcs = new TaskCompletionSource(cancelToken);
@@ -54,15 +52,21 @@ public sealed class AStarPathRequest : PathRequest
{
public EntityCoordinates End;
+ ///
+ /// How close we need to be to the end node to be considered as arrived.
+ ///
+ public float Distance;
+
public AStarPathRequest(
EntityCoordinates start,
EntityCoordinates end,
PathFlags flags,
- float range,
+ float distance,
int layer,
int mask,
- CancellationToken cancelToken) : base(start, flags, range, layer, mask, cancelToken)
+ CancellationToken cancelToken) : base(start, flags, layer, mask, cancelToken)
{
+ Distance = distance;
End = end;
}
}
@@ -84,10 +88,9 @@ public sealed class BFSPathRequest : PathRequest
int expansionLimit,
EntityCoordinates start,
PathFlags flags,
- float range,
int layer,
int mask,
- CancellationToken cancelToken) : base(start, flags, range, layer, mask, cancelToken)
+ CancellationToken cancelToken) : base(start, flags, layer, mask, cancelToken)
{
ExpansionRange = expansionRange;
ExpansionLimit = expansionLimit;
diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.AStar.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.AStar.cs
index 2bc4c60a3c..cca88fc0cf 100644
--- a/Content.Server/NPC/Pathfinding/PathfindingSystem.AStar.cs
+++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.AStar.cs
@@ -82,10 +82,11 @@ public sealed partial class PathfindingSystem
// Actual pathfinding here
(_, currentNode) = request.Frontier.Take();
- // TODO: Need this at some stage but need to fix some steering bugs first before it's useable.
- if (currentNode.Equals(endNode))// ||
- //(endNode.GraphUid == currentNode.GraphUid &&
- //(endNode.Box.Center - currentNode.Box.Center).Length < request.Range))
+ // If we're inside the required distance OR we're at the end node.
+ if ((request.Distance > 0f &&
+ currentNode.Coordinates.TryDistance(EntityManager, request.End, out var distance) &&
+ distance <= request.Distance) ||
+ currentNode.Equals(endNode))
{
arrived = true;
break;
diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.Common.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.Common.cs
index 918276a3b8..6c6a2c26f8 100644
--- a/Content.Server/NPC/Pathfinding/PathfindingSystem.Common.cs
+++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.Common.cs
@@ -11,7 +11,7 @@ public sealed partial class PathfindingSystem
///
/// Maximum amount of nodes we're allowed to expand.
///
- private const int NodeLimit = 200;
+ private const int NodeLimit = 512;
private sealed class PathComparer : IComparer>
{
diff --git a/Content.Server/NPC/Pathfinding/PathfindingSystem.cs b/Content.Server/NPC/Pathfinding/PathfindingSystem.cs
index 498190fe10..62ead9f4d2 100644
--- a/Content.Server/NPC/Pathfinding/PathfindingSystem.cs
+++ b/Content.Server/NPC/Pathfinding/PathfindingSystem.cs
@@ -228,7 +228,6 @@ namespace Content.Server.NPC.Pathfinding
public async Task GetRandomPath(
EntityUid entity,
- float range,
float maxRange,
CancellationToken cancelToken,
int limit = 40,
@@ -246,7 +245,7 @@ namespace Content.Server.NPC.Pathfinding
mask = body.CollisionMask;
}
- var request = new BFSPathRequest(maxRange, limit, start.Coordinates, flags, range, layer, mask, cancelToken);
+ var request = new BFSPathRequest(maxRange, limit, start.Coordinates, flags, layer, mask, cancelToken);
var path = await GetPath(request);
if (path.Result != PathResult.Path)