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); }
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); }