// Non-recursive helper function for AStar algorithm. Implemented to prevent code duplication for each direction above.
private void AStarHelp(AINodeData currentNode, AINodeData checkNode, List<AINodeData> openList, List<AINodeData> closeList, Haxxit.Maps.ProgramHeadNode program, Haxxit.Maps.Point destination)
{
AINodeData.AStarStatus checkNodeStatus = checkNode.AStarTrackStatus;
if (checkNodeStatus != AINodeData.AStarStatus.Closed && checkNode.canHoldCurrentProgram(program))
{
if (checkNodeStatus == AINodeData.AStarStatus.Unlisted)
{
openList.Add(checkNode);
checkNode.Parent = currentNode;
checkNode.AStarTrackStatus = AINodeData.AStarStatus.Open;
checkNode.G = currentNode.G + 1;
checkNode.H = Math.Abs(destination.X - checkNode.Coordinate.X) + Math.Abs(destination.Y - checkNode.Coordinate.Y);
checkNode.F = checkNode.G + checkNode.H;
}
else
{
int checkG = currentNode.G + 1;
if (checkG < checkNode.G)
{
checkNode.Parent = currentNode;
checkNode.G = checkG;
checkNode.F = checkNode.G + checkNode.H;
}
}
}
}