예제 #1
0
        public void SetState(GameStateType type)
        {
            var previousState = _activeState;

            _nextState = _gameStates[type];

            if (_nextState == previousState || _nextState == null)
            {
                return;
            }

            if (previousState != null && previousState.Status != GameStateStatus.Inactive)
            {
                previousState.Deactivate(_nextState);

                var previousWebView = previousState as IHasWebGameState;

                previousWebView?.RawGameWebView.Unregister();
            }

            var nextWebGameState = _nextState as IHasWebGameState;

            _nextWebView = nextWebGameState?.RawGameWebView;

            // If they are not (de)activating, tell states to (de)activate
            if (_nextState.Status != GameStateStatus.Active)
            {
                _nextState.Activate(previousState);
                _nextWebView?.Register();
                _pendingStateChange = true;
            }

            if (_nextState.Status == GameStateStatus.Active && (previousState == null || previousState.Status == GameStateStatus.Inactive))
            {
                _activeState = _nextState;
                _cameraService.SetActiveState(_activeState);
                _nextState          = null;
                _pendingStateChange = false;

                // Propagate state change to UI
                _globalGameWebLayer?.SetUIStateManagerContainer(_activeState.GetStateManagerContainer());
            }
        }