private void OnDrawGizmos() { Gizmos.DrawWireCube(transform.position, new Vector3(WorldSize.x, 1, WorldSize.y)); if (grid != null) { if (seeTypes) { foreach (Cell n in grid) { if (n.Cost == 0) { Gizmos.color = Color.black; } if (n.CellType == CellTypes.emphy) { Gizmos.color = Color.white; } else if (n.CellType == CellTypes.blocked) { Gizmos.color = Color.magenta; } else if (n.CellType == CellTypes.enemy) { Gizmos.color = Color.red; } else if (n.CellType == CellTypes.chest) { Gizmos.color = Color.yellow; } else if (n.CellType == CellTypes.exit) { Gizmos.color = Color.blue; } else { Gizmos.color = Color.black; } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seePathCost && enemySelected != null) //PATH COST { int maxCost = int.MinValue; int minCost = int.MaxValue; foreach (Cell n in grid) { if (n.Node.NodeFinalCost != int.MaxValue) { if (maxCost < n.Node.NodeFinalCost) { maxCost = n.Node.NodeFinalCost; } else if (minCost > n.Node.NodeFinalCost) { minCost = n.Node.NodeFinalCost; } } } foreach (Cell n in grid) { if (n.Node.NodeFinalCost == int.MaxValue) { Gizmos.color = Color.black; } else { Gizmos.color = new Color((float)n.Node.NodeFinalCost / maxCost, (float)n.Node.NodeFinalCost / maxCost, (float)n.Node.NodeFinalCost / maxCost, 1);; } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seePathFromStartCost && enemySelected != null) //PATH INITIAL COST { int maxCost = 1; int minCost = 1; float factor; foreach (Cell n in grid) { if (n.Node.FromInitialCost != int.MaxValue) { if (maxCost < n.Node.FromInitialCost) { maxCost = n.Node.FromInitialCost; } else if (minCost > n.Node.FromInitialCost) { minCost = n.Node.FromInitialCost; } } } factor = minCost / maxCost; foreach (Cell n in grid) { if (n.Node.FromInitialCost == int.MaxValue) { Gizmos.color = Color.black; } else { Gizmos.color = new Color((float)n.Node.FromInitialCost / maxCost, (float)n.Node.FromInitialCost / maxCost, (float)n.Node.FromInitialCost / maxCost, 1); } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seePathFromEndCost && enemySelected != null) // PATH FROM FINAL COST { int maxCost = int.MinValue; int minCost = 1; foreach (Cell n in grid) { if (n.Node.FromFinalCost != int.MaxValue) { if (maxCost < n.Node.FromFinalCost) { maxCost = n.Node.FromFinalCost; } else if (minCost > n.Node.FromFinalCost) { minCost = n.Node.FromFinalCost; } } } foreach (Cell n in grid) { if (n.Node.FromFinalCost == int.MaxValue) { Gizmos.color = Color.black; } else { Gizmos.color = new Color((float)n.Node.FromFinalCost / maxCost, (float)n.Node.FromFinalCost / maxCost, (float)n.Node.FromFinalCost / maxCost, 1); } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seeVisitedCells && enemySelected != null) // PATH FROM FINAL COST { foreach (Cell n in grid) { if (n.Node.visited) { Gizmos.color = Color.green; } else { Gizmos.color = Color.white; } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seeNumberOfAdjacents && enemySelected != null) // PATH FROM FINAL COST { foreach (Cell n in grid) { switch (n.Node.AvaibleAdjacentNodes) { case 0: { Gizmos.color = Color.black; break; } case 1: { Gizmos.color = Color.red; break; } case 2: { Gizmos.color = Color.yellow; break; } case 3: { Gizmos.color = Color.green; break; } case 4: { Gizmos.color = Color.cyan; break; } case 5: { Gizmos.color = Color.blue; break; } case 6: { Gizmos.color = Color.magenta; break; } case 7: { Gizmos.color = Color.grey; break; } case 8: { Gizmos.color = Color.clear; break; } default: { Gizmos.color = Color.white; break; } } Gizmos.DrawCube(n.GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); } } else if (seeEnemyPath && enemySelected != null) { int size = enemySelected.GetSavedPath().Count; LinkedList <Vector2Int> path = enemySelected.GetSavedPath(); LinkedListNode <Vector2Int> element = path.First; for (int i = 0; i < size; i++) { Gizmos.color = new Color((float)i / size, (float)i / size, (float)i / size, 1); Gizmos.DrawCube(grid[element.Value.x, element.Value.y].GlobalPosition, Vector3.one * (cellDiameter * 19 / 20)); element = element.Next; } } else if (seeAStarChilds && enemySelected != null) { Vector2Int initialPos = new Vector2Int(0, 0); bool end = false; for (int x = 0; x < gridSizeX && !end; x++) { for (int y = 0; y < gridSizeY && !end; y++) { if (grid[x, y].Node.FromInitialCost == 0) { end = true; initialPos = new Vector2Int(x, y); } } } Gizmos.color = Color.red; PrintBranchRecursive(initialPos.x, initialPos.y); } } }