Esempio n. 1
0
    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);
            }
        }
    }