Пример #1
0
    public void AddRandomConnection()
    {
        bool connectionMade = false;

        do
        {
            var room = GetRandomRoom();
            var dir  = DirectionUtility.GetRandom();

            for (int i = 0; i < 4; i++)
            {
                var secondRoom = GetRoomInDirection(room, dir);
                if (secondRoom != null && !room.Connections.ContainsKey(dir))
                {
                    room.AddConnection(dir, secondRoom.Id);
                    secondRoom.AddConnection(dir.GetOpposite(), room.Id);

                    connectionMade = true;
                }
                else
                {
                    dir = dir.GetClockwise();
                }
            }
        } while(!connectionMade);
    }
Пример #2
0
    public DungeonRoom AddRandomRoom(int id)
    {
        if (Rooms.Count == 0)
        {
            return(AddStartingRoom());
        }

        DungeonRoom parentRoom = GetRandomParentRoom();
        var         dir        = DirectionUtility.GetRandom();

        // Get a coordinate that isn't taken up by an existing room
        DungeonRoom roomInDirection;

        do
        {
            dir             = dir.GetClockwise();
            roomInDirection = GetRoomInDirection(parentRoom, dir);
        } while (roomInDirection != null);

        // Create new room, connect newRoom to parentRoom
        var coord   = parentRoom.Coordinate + dir.ToVector();
        var width   = Rand.NextGaussian(RoomWidthMean, RoomWidthStd);
        var height  = Rand.NextGaussian(RoomHeightMean, RoomHeightStd);
        var newRoom = new DungeonRoom(id, Level, coord, width, height);

        parentRoom.AddConnection(dir, id);
        newRoom.AddConnection(dir.GetOpposite(), parentRoom.Id);

        Rooms.Add(newRoom);

        return(newRoom);
    }