Dwarrowdelf.TerrainGen.DungeonTerrainGenerator.CreateDungeonLevel C# (CSharp) Method

CreateDungeonLevel() private method

private CreateDungeonLevel ( BSPTree bsp, int z ) : void
bsp BSPTree
z int
return void
        void CreateDungeonLevel(BSPTree bsp, int z)
        {
            var root = new IntGrid2(0, 0, m_size.Width, m_size.Height);
            CreateNodes(bsp, root, 0);

            var td = TileData.EmptyTileData;

            int leafs = MyMath.Pow2(bsp.Depth - 1);

            var rooms = new List<IntGrid2>();

            // Shrink the full sized leaf nodes for rooms
            for (int l = 0; l < leafs; ++l)
            {
                int i = bsp.Length - l - 1;

                var n = bsp[i];
                var grid = n.Grid;

                var xm = GetRandomDouble(0.2, 0.5);
                var ym = GetRandomDouble(0.2, 0.5);

                int columns = (int)((grid.Columns - 1) * xm);
                int rows = (int)((grid.Rows - 1) * ym);
                int x = m_random.Next(grid.Columns - columns) + grid.X;
                int y = m_random.Next(grid.Rows - rows) + grid.Y;

                n.Grid = new IntGrid2(x, y, columns, rows);

                bsp[i] = n;

                rooms.Add(n.Grid);
            }

            m_rooms[z] = rooms.ToArray();

            for (int l = 0; l < leafs; ++l)
            {
                int i = bsp.Length - l - 1;

                var grid = bsp[i].Grid;

                foreach (var p2 in grid.Range())
                {
                    var p = new IntVector3(p2, z);

                    SetTileData(p, td);
                }
            }

            Connect(bsp, 0, true, z);
        }