コード例 #1
0
ファイル: GameState.cs プロジェクト: playgen/it-alert
        protected override void OnEnter()
        {
            try
            {
                // TODO: extract sugar controller from RoomState to subclass or via variable DI?
                Analytics.StartMatch();
                Analytics.AddMatchData("PlayerCount", PlayerManager.Players.Count);

                _stateController = CreateStateController();
                _stateController.Initialize();
                _stateController.EnterState(InitializingState.StateName);
            }
            catch (Exception ex)
            {
                _exceptionHandler.OnException(ex);
            }
        }
コード例 #2
0
ファイル: GameState.cs プロジェクト: playgen/it-alert
        private ITAlertRoomStateController CreateStateController()
        {
            // TODO: handle the lifecyclemanager changestate event in the case of error -> kick players back to lobby.
            var lifecycleStoppedErrorTransition = new LifecycleStoppedTransition(ErrorState.StateName,
                                                                                 ExitCode.Error, ExitCode.Undefined, ExitCode.Abort);

            var lifecycleManager = InitializeSimulationRoot();

            lifecycleManager.Exception += _exceptionHandler.OnException;
            lifecycleManager.Stopped   += lifecycleStoppedErrorTransition.OnLifecycleStopped;

            var initializingState     = new InitializingState(lifecycleManager, PhotonPlugin, Messenger, PlayerManager, RoomSettings, Analytics);
            var initializedTransition = new CombinedPlayersStateTransition(ClientState.Initialized, PlayingState.StateName);

            initializingState.PlayersInitialized += initializedTransition.OnPlayersStateChange;
            initializingState.AddTransitions(initializedTransition, lifecycleStoppedErrorTransition);

            var playingState = new PlayingState(lifecycleManager, PhotonPlugin, Messenger, PlayerManager, RoomSettings, Analytics);
            var lifecycleCompleteTransition = new LifecycleStoppedTransition(FeedbackState.StateName, ExitCode.Complete);

            lifecycleManager.Stopped += lifecycleCompleteTransition.OnLifecycleStopped;
            playingState.AddTransitions(lifecycleCompleteTransition, lifecycleStoppedErrorTransition);

            var feedbackState           = new FeedbackState(lifecycleManager, PhotonPlugin, Messenger, PlayerManager, RoomSettings, Analytics);
            var feedbackStateTransition = new CombinedPlayersStateTransition(ClientState.FeedbackSent, ExitState.StateName);

            feedbackState.PlayerFeedbackSentEvent += feedbackStateTransition.OnPlayersStateChange;
            feedbackState.AddTransitions(feedbackStateTransition);

            var exitState = new ExitState(lifecycleManager, PhotonPlugin, Messenger, PlayerManager, RoomSettings, Analytics);

            var controller = new ITAlertRoomStateController(initializingState, playingState, feedbackState, exitState);

            controller.SetParent(ParentStateController);

            return(controller);
        }