public void SetSettings(RoomLightingSettings start, RoomLightingSettings end) { blendTimer = 0f; RoomLightingSettings.Set(start, blendMaterial); currentSettings = start; goalSettings = end; }
void Update() { if (blendTimer >= 0) { blendTimer += Time.deltaTime / blendTime; float amount = Mathf.SmoothStep(0, 1, blendTimer); RoomLightingSettings lerpedSettings = RoomLightingSettings.Lerp(currentSettings, goalSettings, amount); RoomLightingSettings.Set(lerpedSettings, blendMaterial); if (blendTimer > 1) { blendTimer = -1; } } }
IEnumerator _LoadRoom_Inner(RoomDefinition room) { var previousScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); //get the lighting settings for the current scene _previousLightingSettings = RoomLightingSettings.CreateFromCurrentRoom(); var loadOperation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(room.scenePath, UnityEngine.SceneManagement.LoadSceneMode.Additive); while (!loadOperation.isDone) { yield return(new WaitForEndOfFrame()); } //HACK-ish: do not break the "Assets/.../*.unity" convention for scenes // For whatever reason, the naming is very particular for GetSceneByPath() var nextScene = UnityEngine.SceneManagement.SceneManager.GetSceneByPath("Assets/" + room.scenePath + ".unity"); if (nextScene.IsValid()) { _hasTransitionedLightingForCurrentRoom = false; UnityEngine.SceneManagement.SceneManager.SetActiveScene(nextScene); //get the lighting settings for the current room _currentLightingSettings = RoomLightingSettings.CreateFromCurrentRoom(); RoomLightingSettings.Set(_previousLightingSettings, null); } else { _currentLightingSettings = _previousLightingSettings; } var allRoomManagers = FindObjectsOfType(typeof(BaseRoomManager)); foreach (var obj in allRoomManagers) { if (obj != null && (obj is BaseRoomManager)) { var man = (obj as BaseRoomManager); if (man != null && man.gameObject.scene.IsValid()) { if (man.gameObject.scene == nextScene) { _currentRoomManager = man; } else if (man.gameObject.scene == previousScene) { _previousRoomManager = man; } } } } _currentRoom = room; if (_previousRoomManager != null && _currentRoomManager != null) { float originalRoomYPosition = _currentRoomManager.transform.position.y; _currentRoomManager.transform.position = Vector3.up * (_previousRoomManager.topPlane.transform.position.y + (_currentRoomManager.transform.position.y - _currentRoomManager.bottomPlane.transform.position.y)); if (originalRoomYPosition != _currentRoomManager.transform.position.y) { UnityEngine.Debug.LogWarning("The Y-position for (" + _currentRoomManager.GetType().Name + ") does not correspond to its position as saved in the scene asset. The scene-manager will be moved, but objects marked as static may break."); } } }