Gracefully handle trying to find paths outside the map.

Rather than crashing, return no path instead.
This commit is contained in:
RoosterDragon
2022-04-23 13:20:05 +01:00
committed by atlimit8
parent 4ec19b3486
commit 89042014bd

View File

@@ -62,6 +62,7 @@ namespace OpenRA.Mods.Common.Traits
// If the target cell is inaccessible, bail early. // If the target cell is inaccessible, bail early.
var inaccessible = var inaccessible =
!world.Map.Contains(target) ||
!locomotor.CanMoveFreelyInto(self, target, check, ignoreActor) || !locomotor.CanMoveFreelyInto(self, target, check, ignoreActor) ||
(!(customCost is null) && customCost(target) == PathGraph.PathCostForInvalidPath); (!(customCost is null) && customCost(target) == PathGraph.PathCostForInvalidPath);
if (inaccessible) if (inaccessible)
@@ -74,7 +75,11 @@ namespace OpenRA.Mods.Common.Traits
// For adjacent cells on the same layer, we can return the path without invoking a full search. // For adjacent cells on the same layer, we can return the path without invoking a full search.
if (source.Layer == target.Layer && (source - target).LengthSquared < 3) if (source.Layer == target.Layer && (source - target).LengthSquared < 3)
{
if (!world.Map.Contains(source))
return NoPath;
return new List<CPos>(2) { target, source }; return new List<CPos>(2) { target, source };
}
// With one starting point, we can use a bidirectional search. // With one starting point, we can use a bidirectional search.
using (var fromTarget = PathSearch.ToTargetCell( using (var fromTarget = PathSearch.ToTargetCell(