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)