Пример #1
0
    void CreateRooms()
    {
        int maximumRoomsNumber = (row / 10) * (column / 10);

        if (maximumRoomsNumber == 0)
        {
            return;
        }

        rooms = new List <TileMap_Room>();

        int failureCount      = 0;
        int minimumRoomWidth  = row / 10 * 2;
        int maximumRoomWidth  = row / 10 * 3;
        int minimumRoomHeight = column / 10 * 2;
        int maximumRoomHeight = column / 10 * 3;

        while (true)
        {
            int roomWidth  = Random.Range(minimumRoomWidth, maximumRoomWidth);
            int roomHeight = Random.Range(minimumRoomHeight, maximumRoomHeight);
            int roomLeft   = Random.Range(1, row - 1 - maximumRoomWidth);
            int roomBottom = Random.Range(1, column - 1 - maximumRoomHeight);

            TileMap_Room newRoom = new TileMap_Room(roomLeft, roomBottom, roomWidth, roomHeight);

            bool roomsOverlapping = false;
            for (int i = 0; i < rooms.Count; i++)
            {
                if (rooms.Count <= 0)
                {
                    break;
                }

                roomsOverlapping = newRoom.Overlapping(rooms[i]);

                if (roomsOverlapping == true)
                {
                    break;
                }
            }

            if (roomsOverlapping == true)
            {
                failureCount++;
            }
            else
            {
                rooms.Add(newRoom);
            }

            if ((rooms.Count >= maximumRoomsNumber) || (failureCount >= maximumRoomsNumber * 2))
            {
                break;
            }
        }

        SetupRooms();
    }
Пример #2
0
    public bool Overlapping(TileMap_Room otherRoom)
    {
        if (left > otherRoom.right + 2)
        {
            return(false);
        }
        if (right < otherRoom.left - 2)
        {
            return(false);
        }
        if (bottom > otherRoom.top + 2)
        {
            return(false);
        }
        if (top < otherRoom.bottom - 2)
        {
            return(false);
        }

        return(true);
    }