diff --git a/OpenRA.Game/PathSearch.cs b/OpenRA.Game/PathSearch.cs index 7f94aed315..89b67d58b4 100755 --- a/OpenRA.Game/PathSearch.cs +++ b/OpenRA.Game/PathSearch.cs @@ -66,6 +66,8 @@ namespace OpenRA if (thisCost == float.PositiveInfinity) return p.Location; + + var bi = world.WorldActor.traits.Get(); foreach( int2 d in directions ) { @@ -81,8 +83,7 @@ namespace OpenRA if (costHere == float.PositiveInfinity) continue; - if (!world.WorldActor.traits.Get().CanMoveHere(newHere) && - world.WorldActor.traits.Get().GetBuildingAt(newHere) != ignoreBuilding) + if (!bi.CanMoveHere(newHere, ignoreBuilding)) continue; // Replicate real-ra behavior of not being able to enter a cell if there is a mixture of crushable and uncrushable units diff --git a/OpenRA.Game/Traits/World/BuildingInfluence.cs b/OpenRA.Game/Traits/World/BuildingInfluence.cs index 04b7ca89d4..3671ad2dc2 100644 --- a/OpenRA.Game/Traits/World/BuildingInfluence.cs +++ b/OpenRA.Game/Traits/World/BuildingInfluence.cs @@ -70,4 +70,10 @@ namespace OpenRA.Traits { return map.IsInMap(cell) && !blocked[cell.X, cell.Y]; } + + public bool CanMoveHere(int2 cell, Actor toIgnore) + { + return map.IsInMap(cell) && + (!blocked[cell.X, cell.Y] || influence[cell.X, cell.Y] == toIgnore); + } }}