/// <summary> /// Iterate through the scene loading process, as defined by the LevelLoadingProgress enum, and complete upon reaching its end. This method will trigger several events at perscribed points in the process. /// </summary> IEnumerator switchScene() { while (levelState != LevelLoadingProcess.Done) { levelState += 1; switch (levelState) { case LevelLoadingProcess.LoadingScreen: // currentScene = SceneManager.GetActiveScene(); //this.gameObject.scene; setAsPermanent(); SceneManager.LoadScene(LOADING_SCREEN_NAME, LoadSceneMode.Additive); break; case LevelLoadingProcess.SetActiveLoadingScreen: PlayerInput input = FindObjectOfType <PlayerInput>(); if (input != null) { input.gameObject.SetActive(false); } loadingScene = SceneManager.GetSceneByName(LOADING_SCREEN_NAME); if (loadingScene.name != null) { SceneManager.SetActiveScene(loadingScene); } break; case LevelLoadingProcess.FadeMusic: if (fadeMusic != null) { fadeMusic(); } break; case LevelLoadingProcess.LoadNextScene: if (sceneLoadStart != null) { sceneLoadStart(); } targetContainer.loadScenes(); if (sceneLoadEnd != null) { sceneLoadEnd(); } break; case LevelLoadingProcess.SetActiveNextScene: Scene activeScene = SceneManager.GetSceneByName(targetContainer.sceneNames[0]); if (activeScene.isLoaded == false) { levelState -= 1; //pause the process until this scene is successfully loaded } else { SceneManager.SetActiveScene(activeScene); } break; case LevelLoadingProcess.UnloadCurrentScene: if (targetContainer == currentSceneContainer) { break; } if (currentSceneContainer != null) { currentSceneContainer.unloadAll(); } else { foreach (Scene currentScene in currentScenes) { if (currentScene.isLoaded != false) { SceneManager.UnloadSceneAsync(currentScene); } } } turnOffMenuCam(); break; case LevelLoadingProcess.LoadGui: if (sceneLoadGUI != null) { sceneLoadGUI(); } targetContainer.loadGUI(); targetContainer.loadBackground(); break; case LevelLoadingProcess.LoadSceneSettings: //GameManager gameManager = FindObjectOfType<GameManager>(); //if (gameManager != null) //{ // if (targetContainer.stageSettings != null) // { // gameManager.stageSettings = targetContainer.stageSettings; // } // else // { // gameManager.revertToDefaultSettings(); // } //} break; case LevelLoadingProcess.LoadPlayerSaveData: if (sceneLoadPlayerSaveData != null) { sceneLoadPlayerSaveData(); } break; case LevelLoadingProcess.Done: if (targetContainer.guiIsActive == false) { addEventSysIfNeeded(); } finishLoading(); break; default: break; } yield return(null); } }