void ExpandFrontierAStar(TileNode node) { if (node == null) { return; } for (int i = 0; i < node.neighbors.Length; i++) { if (node.neighbors[i] != null && !mazeGraph.exploredNodes.Contains(node.neighbors[i])) { float distanceToNeighbor = mazeGraph.GetManhattanDistance(node, node.neighbors[i]); float newDistanceTraveled = distanceToNeighbor + node.distanceTraveled; if (float.IsPositiveInfinity(node.neighbors[i].distanceTraveled) || newDistanceTraveled < node.neighbors[i].distanceTraveled) { node.neighbors[i].previousNode = node; node.neighbors[i].distanceTraveled = newDistanceTraveled; } if (!mazeGraph.frontierNodes.Contains(node.neighbors[i])) { float hScore = mazeGraph.GetManhattanDistance(node.neighbors[i], mazeGraph.goalNode); //Distance to goal float gScore = node.neighbors[i].distanceTraveled; //Distance to start float fScore = gScore + hScore; node.neighbors[i].priority = fScore; mazeGraph.frontierNodes.Enqueue(node.neighbors[i]); } } } }