Fix units climbing tunnel faces.

This commit is contained in:
Paul Chote
2017-01-08 21:23:24 +00:00
parent 2bd5a392d1
commit 38ea7dbc5a

View File

@@ -87,6 +87,7 @@ namespace OpenRA.Mods.Common.Pathfinder
readonly MobileInfo mobileInfo; readonly MobileInfo mobileInfo;
readonly MobileInfo.WorldMovementInfo worldMovementInfo; readonly MobileInfo.WorldMovementInfo worldMovementInfo;
readonly CellInfoLayerPool.PooledCellInfoLayer pooledLayer; readonly CellInfoLayerPool.PooledCellInfoLayer pooledLayer;
readonly bool checkTerrainHeight;
CellLayer<CellInfo> groundInfo; CellLayer<CellInfo> groundInfo;
readonly Dictionary<byte, Pair<ICustomMovementLayer, CellLayer<CellInfo>>> customLayerInfo = readonly Dictionary<byte, Pair<ICustomMovementLayer, CellLayer<CellInfo>>> customLayerInfo =
@@ -108,6 +109,7 @@ namespace OpenRA.Mods.Common.Pathfinder
Actor = actor; Actor = actor;
LaneBias = 1; LaneBias = 1;
checkConditions = checkForBlocked ? CellConditions.TransientActors : CellConditions.None; checkConditions = checkForBlocked ? CellConditions.TransientActors : CellConditions.None;
checkTerrainHeight = world.Map.Grid.MaximumTerrainHeight > 0;
} }
// Sets of neighbors for each incoming direction. These exclude the neighbors which are guaranteed // Sets of neighbors for each incoming direction. These exclude the neighbors which are guaranteed
@@ -192,7 +194,15 @@ namespace OpenRA.Mods.Common.Pathfinder
cellCost += customCost; cellCost += customCost;
} }
// directional bonuses for smoother flow! // Prevent units from jumping over height discontinuities
if (checkTerrainHeight && neighborCPos.Layer == 0)
{
var from = neighborCPos - direction;
if (Math.Abs(World.Map.Height[neighborCPos] - World.Map.Height[from]) > 1)
return Constants.InvalidNode;
}
// Directional bonuses for smoother flow!
if (LaneBias != 0) if (LaneBias != 0)
{ {
var ux = neighborCPos.X + (InReverse ? 1 : 0) & 1; var ux = neighborCPos.X + (InReverse ? 1 : 0) & 1;