Exemplo n.º 1
0
        private void BuildGraph()
        {
            Vector2I pos  = new Vector2I(mapBounds.Position);
            Vector2I size = new Vector2I(mapBounds.Size);

            for (int x = 0; x < size.x; x++)
            {
                for (int y = 0; y < size.y; y++)
                {
                    TileMapGraphNode currentTile = tileGraph[x, y];
                    if (currentTile != null && !currentTile.IsWall())
                    {
                        // NORTH
                        if (y > 0 && !tileGraph[x, y - 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x, y - 1], NeighborDirection.NORTH);
                        }
                        // NORTH_EAST
                        if (y > 0 && x < size.x - 1 && !tileGraph[x + 1, y - 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x + 1, y - 1], NeighborDirection.NORTH_EAST);
                        }

                        // NORTH_WEST
                        if (y > 0 && x > 0 && !tileGraph[x - 1, y - 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x - 1, y - 1], NeighborDirection.NORTH_WEST);
                        }

                        // SOUTH
                        if (y < size.y - 1 && !tileGraph[x, y + 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x, y + 1], NeighborDirection.SOUTH);
                        }
                        // SOUTH_EAST
                        if (y < size.y - 1 && x < size.x - 1 && !tileGraph[x + 1, y + 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x + 1, y + 1], NeighborDirection.SOUTH_EAST);
                        }

                        // SOUTH_WEST
                        if (y < size.y - 1 && x > 0 && !tileGraph[x - 1, y + 1].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x - 1, y + 1], NeighborDirection.SOUTH_WEST);
                        }

                        // EAST
                        if (x < size.x - 1 && !tileGraph[x + 1, y].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x + 1, y], NeighborDirection.EAST);
                        }

                        // WEST
                        if (x > 0 && !tileGraph[x - 1, y].IsWall())
                        {
                            currentTile.SetNeighbor(tileGraph[x - 1, y], NeighborDirection.WEST);
                        }
                    }
                }
            }
        }