private FeedbackState CreateFeedbackState(ITAlertPhotonClient photonClient)
        {
            var input = new FeedbackStateInput(photonClient, _director);
            var state = new FeedbackState(input, photonClient);

            var onLobbyStateSync = new OnMessageTransition(
                photonClient,
                ITAlertChannel.GameState,
                typeof(LobbyMessage),
                LobbyState.StateName);

            var onSendAndSimulationSummaryTransition = new OnEventTransition(
                SimulationSummaryState.StateName,
                () => _simulationSummary.HasData);

            var onSendAndNoSimulationSummaryTransition = new OnEventTransition(
                MenuState.StateName,
                () => !_simulationSummary.HasData);

            input.FeedbackSendClickedEvent += onSendAndSimulationSummaryTransition.ChangeState;
            input.FeedbackSendClickedEvent += onSendAndNoSimulationSummaryTransition.ChangeState;

            state.AddTransitions(
                onLobbyStateSync,
                onSendAndSimulationSummaryTransition,
                onSendAndNoSimulationSummaryTransition);

            return(state);
        }
Beispiel #2
0
        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);
        }