public IEnumerable GetNeighbours(Node node, Pathfinding.DistanceType distanceType) { int x = 0, y = 0; switch (distanceType) { case Pathfinding.DistanceType.Manhattan: y = 0; for (x = -1; x <= 1; ++x) { var neighbor = AddNodeNeighbour(x, y, node); if (neighbor != null) { yield return(neighbor); } } x = 0; for (y = -1; y <= 1; ++y) { var neighbor = AddNodeNeighbour(x, y, node); if (neighbor != null) { yield return(neighbor); } } break; case Pathfinding.DistanceType.Euclidean: for (x = -1; x <= 1; x++) { for (y = -1; y <= 1; y++) { var neighbor = AddNodeNeighbour(x, y, node); if (neighbor != null) { yield return(neighbor); } } } break; } }
public System.Collections.IEnumerable GetNeighbours(Node node, Pathfinding.DistanceType distanceType, System.Func <Vector2Int, Vector2Int, bool> isWalkableFrom) { int x = 0, y = 0; switch (distanceType) { case Pathfinding.DistanceType.Manhattan: y = 0; for (x = -1; x <= 1; ++x) { var neighbor = AddNodeNeighbour(x, y, node, isWalkableFrom); if (neighbor != null) { yield return(neighbor); } } x = 0; for (y = -1; y <= 1; ++y) { var neighbor = AddNodeNeighbour(x, y, node, isWalkableFrom); if (neighbor != null) { yield return(neighbor); } } break; case Pathfinding.DistanceType.Euclidean: for (x = -1; x <= 1; x++) { for (y = -1; y <= 1; y++) { var neighbor = AddNodeNeighbour(x, y, node, isWalkableFrom); if (neighbor != null) { yield return(neighbor); } } } break; } }