Minor pathfinder changes

This commit is contained in:
reaperrr
2015-07-17 23:58:45 +02:00
parent 5109848215
commit 711ec0c600
5 changed files with 21 additions and 22 deletions

View File

@@ -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();

View File

@@ -97,7 +97,7 @@ namespace OpenRA.Mods.Common.Pathfinder
{
defaultCellInfoLayer =
CellLayer<CellInfo>.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);
}

View File

@@ -25,5 +25,7 @@ namespace OpenRA.Mods.Common.Pathfinder
/// a unit took to move one cell diagonally)
/// </summary>
public const int DiagonalCellCost = 177;
public const int InvalidNode = int.MaxValue;
}
}

View File

@@ -23,7 +23,7 @@ namespace OpenRA.Mods.Common.Pathfinder
/// <summary>
/// Gets all the Connections for a given node in the graph
/// </summary>
ICollection<GraphConnection> GetConnections(CPos position);
IEnumerable<GraphConnection> GetConnections(CPos position);
/// <summary>
/// Retrieves an object given a node in the graph
@@ -73,8 +73,6 @@ namespace OpenRA.Mods.Common.Pathfinder
readonly MobileInfo mobileInfo;
CellLayer<CellInfo> cellInfo;
public const int InvalidNode = int.MaxValue;
public PathGraph(CellLayer<CellInfo> cellInfo, MobileInfo mobileInfo, Actor actor, World world, bool checkForBlocked)
{
this.cellInfo = cellInfo;
@@ -102,7 +100,7 @@ namespace OpenRA.Mods.Common.Pathfinder
new[] { new CVec(1, -1), new CVec(1, 0), new CVec(-1, 1), new CVec(0, 1), new CVec(1, 1) },
};
public ICollection<GraphConnection> GetConnections(CPos position)
public IEnumerable<GraphConnection> GetConnections(CPos position)
{
var previousPos = cellInfo[position].PreviousPos;
@@ -116,7 +114,7 @@ namespace OpenRA.Mods.Common.Pathfinder
{
var neighbor = position + directions[i];
var movementCost = GetCostToNode(neighbor, directions[i]);
if (movementCost != InvalidNode)
if (movementCost != Constants.InvalidNode)
validNeighbors.AddLast(new GraphConnection(position, neighbor, movementCost));
}
@@ -127,17 +125,17 @@ 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);
}
return InvalidNode;
return Constants.InvalidNode;
}
int CalculateCellCost(CPos neighborCPos, CVec direction, int movementCost)
@@ -148,7 +146,13 @@ namespace OpenRA.Mods.Common.Pathfinder
cellCost = (cellCost * 34) / 24;
if (CustomCost != null)
cellCost += CustomCost(neighborCPos);
{
var customCost = CustomCost(neighborCPos);
if (customCost == Constants.InvalidNode)
return Constants.InvalidNode;
cellCost += customCost;
}
// directional bonuses for smoother flow!
if (LaneBias != 0)
@@ -184,15 +188,8 @@ namespace OpenRA.Mods.Common.Pathfinder
public CellInfo this[CPos pos]
{
get
{
return cellInfo[pos];
}
set
{
cellInfo[pos] = value;
}
get { return cellInfo[pos]; }
set { cellInfo[pos] = value; }
}
}
}