Ejemplo 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);
        }
Ejemplo n.º 2
0
        public void TEST(BSPNode Left, BSPNode Right)
        {
            if (Left.isLeaf() && Right.isLeaf())
            {
                CreateHall(Left, Right);
            }
            else
            {
                if (!Left.isLeaf() && Right.isLeaf())
                {
                    if (Left.Left != null && Left.Right != null)
                    {
                        if (Left.Left.xDistanceFromCenter(Right.xCenter()) < Left.Right.xDistanceFromCenter(Right.xCenter()) &&
                            Left.Left.yDistanceFromCenter(Right.yCenter()) < Left.Right.yDistanceFromCenter(Right.yCenter()))
                        {
                            TEST(Left.Left, Right);
                        }
                        else
                        {
                            TEST(Left.Right, Right);
                        }
                    }
                    else if (Left.Left != null)
                    {
                        TEST(Left.Left, Right);
                    }
                    else
                    {
                        TEST(Left.Right, Right);
                    }
                }
                else if (Left.isLeaf() && !Right.isLeaf())
                {
                    if (Right.Left != null && Right.Right != null)
                    {
                        if (Right.Left.xDistanceFromCenter(Left.xCenter()) < Right.Right.xDistanceFromCenter(Left.xCenter()) &&
                            Right.Left.yDistanceFromCenter(Right.yCenter()) < Right.Right.yDistanceFromCenter(Left.yCenter()))
                        {
                            TEST(Left, Right.Left);
                        }
                        else
                        {
                            TEST(Left, Right.Right);
                        }
                    }
                    else if (Right.Left != null)
                    {
                        TEST(Left, Right.Left);
                    }
                    else
                    {
                        TEST(Left, Right.Right);
                    }
                }
                else
                {
                    int leftleft_RightX   = Math.Abs(Left.Left.xDistanceFromCenter(Right.xCenter()));
                    int leftleft_RightY   = Math.Abs(Left.Left.yDistanceFromCenter(Right.yCenter()));
                    int leftleft_RightTot = leftleft_RightX + leftleft_RightY;

                    int leftright_RightX   = Math.Abs(Left.Right.xDistanceFromCenter(Right.xCenter()));
                    int leftright_RightY   = Math.Abs(Left.Right.yDistanceFromCenter(Right.yCenter()));
                    int leftright_RightTot = leftright_RightX + leftright_RightY;

                    int rightleft_LeftX   = Math.Abs(Left.Left.xDistanceFromCenter(Left.xCenter()));
                    int rightleft_LeftY   = Math.Abs(Left.Left.yDistanceFromCenter(Left.yCenter()));
                    int rightleft_LeftTot = rightleft_LeftX + rightleft_LeftY;

                    int rightright_LeftX   = Math.Abs(Left.Right.xDistanceFromCenter(Left.xCenter()));
                    int rightright_LeftY   = Math.Abs(Left.Right.yDistanceFromCenter(Left.yCenter()));
                    int rightright_LeftTot = rightright_LeftX + rightright_LeftY;

                    // find left
                    if (leftleft_RightTot < leftright_RightTot)
                    {
                        //Find right
                        if (rightleft_LeftTot < rightright_LeftTot)
                        {
                            TEST(Left.Left, Right.Left);
                        }
                        else
                        {
                            TEST(Left.Left, Right.Right);
                        }
                    }
                    else
                    {
                        //Find right
                        if (rightleft_LeftTot < rightright_LeftTot)
                        {
                            TEST(Left.Right, Right.Left);
                        }
                        else
                        {
                            TEST(Left.Right, Right.Right);
                        }
                    }
                }
            }
        }