public void StartTransition( RuntimeLightingSettings targetLightingSettings, RuntimeRenderSettings targetRenderSettings, RuntimeSunlightSettings targetSunlightSettings, LightingSceneTransitionType transitionType = LightingSceneTransitionType.None, float transitionDuration = 1) { // Update our target settings this.transitionElapsed = 0; this.transitionType = transitionType; this.transitionDuration = transitionDuration; this.targetLightingSettings = targetLightingSettings; this.targetRenderSettings = targetRenderSettings; this.targetSunlightSettings = targetSunlightSettings; switch (transitionType) { case LightingSceneTransitionType.None: // Just execute the transition right now // Zap immediately to the new values currentLightingSettings = targetLightingSettings; currentRenderSettings = targetRenderSettings; currentSunlightSettings = targetSunlightSettings; transitionElapsed = transitionDuration; ApplySettings(); return; } // Otherwise, copy our old settings so we have something to lerp from prevLightingSettings = currentLightingSettings; prevRenderSettings = currentRenderSettings; prevSunlightSettings = currentSunlightSettings; }
/// <inheritdoc /> public async void SetLightingScene(string newLightingSceneName, LightingSceneTransitionType transitionType = LightingSceneTransitionType.None, float transitionDuration = 1f) { Debug.Log("Set lighting scene: " + newLightingSceneName); if (ActiveLightingScene == newLightingSceneName) { // Nothing to do here return; } if (!CanSceneOpProceed(SceneType.Lighting)) { Debug.LogError("Attempting to perform a scene op when a scene op is already in progress."); return; } SceneInfo lightingScene; RuntimeLightingSettings lightingSettings = default(RuntimeLightingSettings); RuntimeRenderSettings renderSettings = default(RuntimeRenderSettings); RuntimeSunlightSettings sunSettings = default(RuntimeSunlightSettings); if (!string.IsNullOrEmpty(newLightingSceneName) && !profile.GetLightingSceneSettings( newLightingSceneName, out lightingScene, out lightingSettings, out renderSettings, out sunSettings)) { // Make sure we don't try to load a non-existent scene Debug.LogWarning("Couldn't find lighting scene " + newLightingSceneName + " in profile - taking no action."); return; } ActiveLightingScene = newLightingSceneName; if (!Application.isPlaying) { // Everything else is runtime-only return; } // Start the lighting executor transition - don't bother waiting for load / unload, it can start right away lightingExecutor.StartTransition(lightingSettings, renderSettings, sunSettings, transitionType, transitionDuration); List <string> lightingSceneNames = new List <string>(); // Create a list of lighting scenes to unload foreach (SceneInfo lso in LightingScenes) { if (lso.Name != newLightingSceneName) { lightingSceneNames.Add(lso.Name); } } // Load the new lighting scene immediately await LoadScenesInternal(new string[] { newLightingSceneName }, SceneType.Lighting, null, 0f, 0.5f, true); // Unload the other lighting scenes await UnloadScenesInternal(lightingSceneNames, SceneType.Lighting, 0.5f, 1f, false); }
private void RenderLightingScenes(IMixedRealitySceneSystem sceneSystem, IMixedRealitySceneSystemEditor sceneSystemEditor, List <SceneInfo> lightingScenes) { EditorGUILayout.HelpBox("Select the active lighting scene by clicking its name.", MessageType.Info); if (Application.isPlaying) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); EditorGUILayout.LabelField("Current Scene Operation", EditorStyles.boldLabel); EditorGUILayout.Toggle("Scene Operation In Progress", sceneSystem.LightingOperationInProgress); EditorGUILayout.FloatField("Progress", sceneSystem.LightingOperationProgress); transitionType = (LightingSceneTransitionType)EditorGUILayout.EnumPopup("Lighting transition type", transitionType); if (transitionType != LightingSceneTransitionType.None) { transitionSpeed = EditorGUILayout.Slider("Lighting transition speed", transitionSpeed, 0f, 10f); } EditorGUILayout.EndVertical(); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(); foreach (SceneInfo lightingScene in lightingScenes) { if (lightingScene.IsEmpty) { GUI.color = errorColor; GUILayout.Button("(Scene Missing)", EditorStyles.toolbarButton); continue; } bool selected = lightingScene.Name == sceneSystem.ActiveLightingScene; GUI.color = selected ? enabledColor : disabledColor; if (GUILayout.Button(lightingScene.Name, EditorStyles.toolbarButton) && !selected) { sceneSystem.SetLightingScene(lightingScene.Name, transitionType, transitionSpeed); } } EditorGUILayout.EndVertical(); }