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);
}