Esempio n. 1
0
        private static Tile[,] GenerateTiles(int width,
                                             int height,
                                             IList <Chamber> chambers,
                                             IList <Corridor> corridors)
        {
            Tile[,] tiles = new Tile[width, height];
            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                {
                    tiles[x, y] = new Tile(Tile.Type.Wall, true);
                }
            }

            const int CORRIDOR_WIDTH = 3;

            foreach (Corridor c in corridors)
            {
                for (int i = 0; i < c.intermediatePoints.Count - 1; ++i)
                {
                    Point2i src = c.intermediatePoints[i];
                    Point2i dst = c.intermediatePoints[i + 1];

                    Point2i pointer = src;
                    Point2i delta   = pointer.DeltaTowards(dst);
                    Assert.IsTrue((delta.x == 0) || (delta.y == 0));

                    while (pointer != c.intermediatePoints[i + 1])
                    {
                        PlaceCorridor(tiles, pointer, CORRIDOR_WIDTH);
                        pointer += delta;
                    }
                    PlaceCorridor(tiles, pointer, CORRIDOR_WIDTH);
                }
            }

            List <Point2i> chamberTiles = new List <Point2i>();

            foreach (Chamber c in chambers)
            {
                for (int y = c.bottom; y < c.top; ++y)
                {
                    for (int x = c.left; x < c.right; ++x)
                    {
                        tiles[x, y] = new Tile(Tile.Type.Chamber, false);
                        chamberTiles.Add(new Point2i(x, y));
                    }
                }
            }

            return(tiles);
        }