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

CreateNodes() private method

private CreateNodes ( BSPTree bsp, IntGrid2 grid, int i ) : void
bsp BSPTree
grid IntGrid2
i int
return void
        void CreateNodes(BSPTree bsp, IntGrid2 grid, int i)
        {
            int middle;
            bool horiz;

            if (grid.Columns <= 4 && grid.Rows <= 4)
            {
                Debugger.Break();
                throw new Exception();
            }
            else if (grid.Columns <= 4)
            {
                horiz = true;
            }
            else if (grid.Rows <= 4)
            {
                horiz = false;
            }
            else
            {
                horiz = grid.Columns < grid.Rows;
            }

            double m = GetRandomDouble(0.4, 0.6);

            if (horiz)
                middle = (int)(grid.Rows * m);
            else
                middle = (int)(grid.Columns * m);

            bsp[i] = new BSPNode(grid, horiz);

            if (bsp.IsLeaf(i))
                return;

            int left = bsp.GetLeft(i);
            int right = bsp.GetRight(i);

            if (horiz)
            {
                // up
                var g1 = new IntGrid2(grid.X, grid.Y, grid.Columns, middle);
                CreateNodes(bsp, g1, left);

                // down
                var g2 = new IntGrid2(grid.X, grid.Y + middle + 1, grid.Columns, grid.Rows - middle - 1);
                CreateNodes(bsp, g2, right);
            }
            else
            {
                // left
                var g1 = new IntGrid2(grid.X, grid.Y, middle, grid.Rows);
                CreateNodes(bsp, g1, left);

                // right
                var g2 = new IntGrid2(grid.X + middle + 1, grid.Y, grid.Columns - middle - 1, grid.Rows);
                CreateNodes(bsp, g2, right);
            }
        }