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