Exemplo n.º 1
0
        public void GenerateDungeonLevel()
        {
            int randomSeed;

            do
            {
                randomSeed = random.Next(60, 100);
            }while (randomSeed % 4 != 0);
            Console.WriteLine(randomSeed);

            myBSPTree    = new BSPTree(randomSeed, randomSeed, true);
            myGrid       = new TileGrid(Constants.tileSize, Constants.tileSize, randomSeed, randomSeed);
            currentLevel = new Level(myGrid);

            foreach (BSPNode node in myBSPTree.nodes)
            {
                if (node.isLeaf())
                {
                    currentLevel.rooms.Add(new Room(Room.PlacementType.Floor, myGrid, node.x, node.y, node.width, node.height));
                }
            }

            foreach (BSPNode hall in myBSPTree.halls)
            {
                currentLevel.rooms.Add(new Room(Room.PlacementType.Corridor, myGrid, hall.x, hall.y, hall.width, hall.height));
            }

            BSPNode tempNode = null;

            foreach (BSPNode node in myBSPTree.nodes)
            {
                if (tempNode == null)
                {
                    tempNode = node;
                }
                else if (node.width * node.height < tempNode.width * tempNode.height)
                {
                    tempNode = node;
                }
            }
            currentLevel.UpdateWalls();
            currentLevel.myStartPosition = myGrid.ReturnTileCenter(tempNode.xCenter(), tempNode.yCenter());
            levels.AddLevel(currentLevel);
        }