Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
        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();
                }
            }
        }