public string GetSceneName(GameSystemType type) { var name = ""; switch (type) { case GameSystemType.Story: name = _storySceneName; break; case GameSystemType.Cutscene: name = _cutsceneSceneName; break; case GameSystemType.Editor: name = _editorSceneName; break; case GameSystemType.Hacking: name = _hackingSceneName; break; } return name; }
private IEnumerator LoadGameSystemAsync(string roomName, GameSystemType gameSystemType, bool showOverlay = true, bool isLongFade = false) { var t = 0.0f; GameSystem prevGameSystem = _gameSystem; if (showOverlay) { yield return(_camera.ShowLoadOverlay(isLongFade: isLongFade)); } var sceneName = _gameConfig.GetSceneName(gameSystemType); if (prevGameSystem != null) { yield return(UnloadGameSystem(prevGameSystem)); } yield return(SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive)); SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneName)); _gameSystem = GameObject.FindObjectOfType <GameSystem>(); if (_gameSystem != null) { _gameSystem.OnLoadingFinished += loadingFinishedHandler; _gameSystem.OnFinished += GameSystemFinishHandler; switch (gameSystemType) { case GameSystemType.Story: var args = new StoryGameSystemArgs() { Services = _services, RoomName = roomName }; _gameSystem.Initialize(args); break; case GameSystemType.Hacking: var hArgs = new HackingGameSystemArgs() { Services = _services, RoomName = roomName }; _gameSystem.Initialize(hArgs); break; case GameSystemType.Cutscene: var cArgs = new CutsceneGameSystemArgs() { Services = _services, RoomName = roomName }; _gameSystem.Initialize(cArgs); break; } } void loadingFinishedHandler() { _gameSystem.OnLoadingFinished -= loadingFinishedHandler; StartCoroutine(hideLoadingThenRun()); IEnumerator hideLoadingThenRun() { if (showOverlay) { yield return(_camera.HideLoadOverlay(isLongFade: isLongFade)); } _gameSystem.Run(); } } }