Exemple #1
0
    private RoomFitTransform checkIfRoomFits(Coordinate baseTile, RoomDataHolder roomData)
    {
        RoomFitTransform resultingTransformation = null;

        // Test each orientation in a random order
        Orientation[] checkableOrientations = { Orientation.NORTH, Orientation.EAST, Orientation.SOUTH, Orientation.WEST };
        while (checkableOrientations.Length > 0)
        {
            // Test random orientation
            Orientation orientationToCheck = CommonOperations.getRandomItemFromList <Orientation>(checkableOrientations);

            // Null if it didn't fit with the orientation, otherwise success!
            resultingTransformation = checkIfRoomFits(baseTile, roomData, orientationToCheck);
            if (resultingTransformation != null)
            {
                break;
            }

            // Remove checked orientation from list
            Orientation[] newCheckableOrientations = new Orientation[checkableOrientations.Length - 1];
            int           index = 0;
            for (int i = 0; i < checkableOrientations.Length && index < newCheckableOrientations.Length; ++i)
            {
                if (checkableOrientations[i] != orientationToCheck)
                {
                    newCheckableOrientations[index++] = checkableOrientations[i];
                }
            }
            checkableOrientations = newCheckableOrientations.Clone() as Orientation[];

            // No orientation could fit the tile
            if (checkableOrientations.Length == 0)
            {
                break;
            }
        }

        // Pass any result to the caller!
        return(resultingTransformation);
    }
Exemple #2
0
    public GameObject getNextFittingRoom(Coordinate baseTile)
    {
        RoomDataHolder checkRoom = mansionDataHandler.getRoomDataOnCoordinate(new Coordinate(0, 0, 1));

        //List<UnityEngine.Object> roomPrefabs = getAllRoomPrefabs();
        GameObject[] checkableSpawnableRooms = spawnableRooms;
        while (checkableSpawnableRooms.Length > 0)
        {
            GameObject roomObject = CommonOperations.getRandomItemFromList <GameObject>(checkableSpawnableRooms);

            RoomDataHolder roomData = roomObject.GetComponent(typeof(RoomDataHolder)) as RoomDataHolder;
            if (roomData != null)
            {
                RoomFitTransform roomFitTransform = checkIfRoomFits(baseTile, roomData);
                if (roomFitTransform != null)
                {
                    roomData.setWorldPosition(baseTile + roomFitTransform.baseLocation);
                    roomData.setOrientation(roomFitTransform.orientation);
                    RoomDataHolder roomData2 = roomObject.GetComponent(typeof(RoomDataHolder)) as RoomDataHolder;

                    return(roomObject);
                }
            }

            // Remove checked GameObject from list
            GameObject[] newCheckableSpawnableRooms = new GameObject[checkableSpawnableRooms.Length - 1];
            int          index = 0;
            for (int i = 0; i < checkableSpawnableRooms.Length && index < newCheckableSpawnableRooms.Length; ++i)
            {
                if (checkableSpawnableRooms[i] != roomObject)
                {
                    newCheckableSpawnableRooms[index++] = checkableSpawnableRooms[i];
                }
            }
            checkableSpawnableRooms = newCheckableSpawnableRooms.Clone() as GameObject[];
        }
        return(null);
    }