Exemplo n.º 1
0
        // Use this for initialization
        void Start()
        {
            grid = Grid2D.instance;

            // setup GUI resizer - only for the demo
            GUIResizer.Init(800, 500);
            labelStyle                  = new GUIStyle();
            labelStyle.alignment        = TextAnchor.MiddleLeft;
            labelStyle.normal.textColor = Color.white;

            isSelectingStart = true;

            Random.InitState(2);

            // Draw some blocked areas
            for (int i = 0; i < 25; i++)
            {
                int row = Random.Range(2, grid.rowCount - 3);
                int col = Random.Range(2, grid.columnCount - 3);

                for (int j = -2; j <= 2; j++)
                {
                    for (int k = -2; k <= 2; k++)
                    {
                        int cellIndex = grid.CellGetIndex(row + j, col + k);
                        grid.CellSetGroup(cellIndex, CELL_OBSTACLE);
                        grid.CellToggle(cellIndex, true, Color.white);
                    }
                }
            }


            // Example: sets crossing costs for hexagon sides and draw a line
            int   barrierCost  = 100;
            Color barrierColor = Color.blue;
            float barrierWidth = 5f;

            for (int k = 0; k < 10; k++)
            {
                int cellIndex = grid.CellGetIndex(10, k + 20);
                if (!grid.cells [cellIndex].canCross)
                {
                    continue;
                }
                if (grid.cells [cellIndex].column % 2 == 0)
                {
                    grid.CellSetSideCrossCost(cellIndex, CELL_SIDE.Top, barrierCost);
                    grid.CellSetSideCrossCost(cellIndex, CELL_SIDE.TopLeft, barrierCost);
                    grid.CellSetSideCrossCost(cellIndex, CELL_SIDE.TopRight, barrierCost);
                    grid.DrawLine(cellIndex, CELL_SIDE.Top, barrierColor, barrierWidth);
                    grid.DrawLine(cellIndex, CELL_SIDE.TopLeft, barrierColor, barrierWidth);
                    grid.DrawLine(cellIndex, CELL_SIDE.TopRight, barrierColor, barrierWidth);
                }
                else
                {
                    grid.CellSetSideCrossCost(cellIndex, CELL_SIDE.Top, barrierCost);
                    grid.DrawLine(cellIndex, CELL_SIDE.Top, barrierColor, barrierWidth);
                }
            }



            // Hook into cell click event to toggle start selection or draw a computed path using A* path finding algorithm
            grid.OnCellClick += (cellIndex) => BuildPath(cellIndex);

            grid.OnCellEnter += (cellIndex) => ShowLineOfSight(cellIndex);
        }