diff --git a/OpenRA.Game/Traits/World/ActorMap.cs b/OpenRA.Game/Traits/World/ActorMap.cs index b90a987052..f6b8dc4a1d 100644 --- a/OpenRA.Game/Traits/World/ActorMap.cs +++ b/OpenRA.Game/Traits/World/ActorMap.cs @@ -212,35 +212,36 @@ namespace OpenRA.Traits yield return i.Actor; } - public bool HasFreeSubCell(CPos a, bool checkTransient = true) + public bool HasFreeSubCell(CPos cell, bool checkTransient = true) { - return FreeSubCell(a, SubCell.Any, checkTransient) != SubCell.Invalid; + return FreeSubCell(cell, SubCell.Any, checkTransient) != SubCell.Invalid; } - public SubCell FreeSubCell(CPos a, SubCell preferredSubCell = SubCell.Any, bool checkTransient = true) + public SubCell FreeSubCell(CPos cell, SubCell preferredSubCell = SubCell.Any, bool checkTransient = true) { - if (preferredSubCell > SubCell.Any && !AnyUnitsAt(a, preferredSubCell, checkTransient)) + if (preferredSubCell > SubCell.Any && !AnyUnitsAt(cell, preferredSubCell, checkTransient)) return preferredSubCell; - if (!AnyUnitsAt(a)) + if (!AnyUnitsAt(cell)) return map.DefaultSubCell; for (var i = (int)SubCell.First; i < map.SubCellOffsets.Length; i++) - if (i != (int)preferredSubCell && !AnyUnitsAt(a, (SubCell)i, checkTransient)) + if (i != (int)preferredSubCell && !AnyUnitsAt(cell, (SubCell)i, checkTransient)) return (SubCell)i; + return SubCell.Invalid; } - public SubCell FreeSubCell(CPos a, SubCell preferredSubCell, Func checkIfBlocker) + public SubCell FreeSubCell(CPos cell, SubCell preferredSubCell, Func checkIfBlocker) { - if (preferredSubCell > SubCell.Any && !AnyUnitsAt(a, preferredSubCell, checkIfBlocker)) + if (preferredSubCell > SubCell.Any && !AnyUnitsAt(cell, preferredSubCell, checkIfBlocker)) return preferredSubCell; - if (!AnyUnitsAt(a)) + if (!AnyUnitsAt(cell)) return map.DefaultSubCell; for (var i = (int)SubCell.First; i < map.SubCellOffsets.Length; i++) - if (i != (int)preferredSubCell && !AnyUnitsAt(a, (SubCell)i, checkIfBlocker)) + if (i != (int)preferredSubCell && !AnyUnitsAt(cell, (SubCell)i, checkIfBlocker)) return (SubCell)i; return SubCell.Invalid; } @@ -325,7 +326,7 @@ namespace OpenRA.Traits } } - void RemoveInfluenceInner(ref InfluenceNode influenceNode, Actor toRemove) + static void RemoveInfluenceInner(ref InfluenceNode influenceNode, Actor toRemove) { if (influenceNode == null) return; diff --git a/OpenRA.Game/WPos.cs b/OpenRA.Game/WPos.cs index 024e6ab4df..c1dfc4babc 100644 --- a/OpenRA.Game/WPos.cs +++ b/OpenRA.Game/WPos.cs @@ -35,6 +35,9 @@ namespace OpenRA public static bool operator ==(WPos me, WPos other) { return me.X == other.X && me.Y == other.Y && me.Z == other.Z; } public static bool operator !=(WPos me, WPos other) { return !(me == other); } + /// + /// Returns the linear interpolation between points 'a' and 'b' + /// public static WPos Lerp(WPos a, WPos b, int mul, int div) { return a + (b - a) * mul / div; } public static WPos LerpQuadratic(WPos a, WPos b, WAngle pitch, int mul, int div) diff --git a/OpenRA.Mods.Common/Pathfinder/BasePathSearch.cs b/OpenRA.Mods.Common/Pathfinder/BasePathSearch.cs index 981eb065a4..57fb3c3cad 100644 --- a/OpenRA.Mods.Common/Pathfinder/BasePathSearch.cs +++ b/OpenRA.Mods.Common/Pathfinder/BasePathSearch.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Pathfinder if (string.IsNullOrEmpty(id)) { var builder = new StringBuilder(); - builder.Append(this.Graph.Actor.ActorID); + builder.Append(Graph.Actor.ActorID); while (!startPoints.Empty) { var startpoint = startPoints.Pop(); diff --git a/OpenRA.Mods.Common/Pathfinder/CellInfoLayerManager.cs b/OpenRA.Mods.Common/Pathfinder/CellInfoLayerManager.cs index 5badfe959e..a78a783cf1 100644 --- a/OpenRA.Mods.Common/Pathfinder/CellInfoLayerManager.cs +++ b/OpenRA.Mods.Common/Pathfinder/CellInfoLayerManager.cs @@ -97,7 +97,7 @@ namespace OpenRA.Mods.Common.Pathfinder { defaultCellInfoLayer = CellLayer.CreateInstance( - mpos => new CellInfo(int.MaxValue, int.MaxValue, mpos.ToCPos(map as Map), CellStatus.Unvisited), + mpos => new CellInfo(int.MaxValue, int.MaxValue, mpos.ToCPos(map), CellStatus.Unvisited), new Size(map.MapSize.X, map.MapSize.Y), map.TileShape); } diff --git a/OpenRA.Mods.Common/Pathfinder/PathGraph.cs b/OpenRA.Mods.Common/Pathfinder/PathGraph.cs index a84c542121..4336184890 100644 --- a/OpenRA.Mods.Common/Pathfinder/PathGraph.cs +++ b/OpenRA.Mods.Common/Pathfinder/PathGraph.cs @@ -73,8 +73,6 @@ namespace OpenRA.Mods.Common.Pathfinder readonly MobileInfo mobileInfo; CellLayer cellInfo; - public const int InvalidNode = int.MaxValue; - public PathGraph(CellLayer cellInfo, MobileInfo mobileInfo, Actor actor, World world, bool checkForBlocked) { this.cellInfo = cellInfo; @@ -127,11 +125,11 @@ namespace OpenRA.Mods.Common.Pathfinder { int movementCost; if (mobileInfo.CanEnterCell( - World as World, - Actor as Actor, + World, + Actor, destNode, out movementCost, - IgnoredActor as Actor, + IgnoredActor, checkConditions) && !(CustomBlock != null && CustomBlock(destNode))) { return CalculateCellCost(destNode, direction, movementCost); diff --git a/OpenRA.Mods.Common/Traits/World/PathFinder.cs b/OpenRA.Mods.Common/Traits/World/PathFinder.cs index 25d96aea35..70e71fcfc6 100644 --- a/OpenRA.Mods.Common/Traits/World/PathFinder.cs +++ b/OpenRA.Mods.Common/Traits/World/PathFinder.cs @@ -93,7 +93,7 @@ namespace OpenRA.Mods.Common.Traits // This assumes that the SubCell does not change during the path traversal var tilesInRange = world.Map.FindTilesInCircle(targetCell, range.Length / 1024 + 1) .Where(t => (world.Map.CenterOfCell(t) - target).LengthSquared <= range.LengthSquared - && mi.CanEnterCell(self.World as World, self as Actor, t)); + && mi.CanEnterCell(self.World, self, t)); // See if there is any cell within range that does not involve a cross-domain request // Really, we only need to check the circle perimeter, but it's not clear that would be a performance win