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); }
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); }