private void OnStateChange(object sender, StateChangeArgs args) { switch (args.To) { case State.Intro: break; case State.Idle: if (Administrant.IsLocalPlayer) { Game.DisplayHelp("Press " + System.Windows.Forms.Keys.Space + " to pump their chest.", 2000); } adminTask = Administrant.Tasks.PlayAnimation("mini@cpr@char_a@cpr_def", "cpr_pumpchest_idle", -1, 4.0f, -8.0f, 0, AnimationFlags.Loop); patientTask = Patient.Tasks.PlayAnimation("mini@cpr@char_b@cpr_def", "cpr_pumpchest_idle", -1, 4.0f, -8.0f, 0, AnimationFlags.Loop); break; case State.Pump: adminTask = Administrant.Tasks.PlayAnimation("mini@cpr@char_a@cpr_str", "cpr_pumpchest", -1, 4.0f, -8.0f, 0, AnimationFlags.None); patientTask = Patient.Tasks.PlayAnimation("mini@cpr@char_b@cpr_str", "cpr_pumpchest", -1, 4.0f, -8.0f, 0, AnimationFlags.None); Pumps++; break; case State.Success: adminTask = Administrant.Tasks.PlayAnimation("mini@cpr@char_a@cpr_str", "cpr_success", -1, 4.0f, -8.0f, 0, AnimationFlags.None); patientTask = Patient.Tasks.PlayAnimation("mini@cpr@char_b@cpr_str", "cpr_success", -1, 4.0f, -8.0f, 0, AnimationFlags.None); NativeFunction.Natives.ClearFacialIdleAnimOverride(Patient); NativeFunction.Natives.SetFacialIdleAnimOverride(Patient, "mood_Happy_1", 0); break; case State.Failure: adminTask = Administrant.Tasks.PlayAnimation("mini@cpr@char_a@cpr_str", "cpr_fail", -1, 4.0f, -8.0f, 0, AnimationFlags.None); patientTask = Patient.Tasks.PlayAnimation("mini@cpr@char_b@cpr_str", "cpr_fail", -1, 4.0f, -8.0f, 0, AnimationFlags.None); break; } }
/// <summary> /// 状态改变完成之后回调,执行ChangeGameState /// </summary> public void ChangeGameStateQueue() { if (0 != this.m_GameStateQueue.Count) { StateChangeArgs stateChangeArgs = this.m_GameStateQueue.Dequeue(); this.ChangeGameState(stateChangeArgs.GameState, stateChangeArgs.LoadingStyle, stateChangeArgs.CallBack); } }
public override void Perform(StateChangeArgs stateChangeDetails) { stateChangeDetails.StartState.RaisePreExitEvent(stateChangeDetails); stateChangeDetails.StartState.RaiseExitEvent(stateChangeDetails); stateChangeDetails.StartState.RaisePostExitEvent(stateChangeDetails); stateChangeDetails.EndState.RaisePreEnterEvent(stateChangeDetails); stateChangeDetails.EndState.RaiseEnterEvent(stateChangeDetails); stateChangeDetails.EndState.RaisePostEnterEvent(stateChangeDetails); RaiseTransitionCompletedEvent(); }
protected virtual void OnStateChanged(object sender, StateChangeArgs args) { //Check if we are currently paused displaying the key frame waiting for the user to //go in to Play. If so we can stop if (inKeyFrame) { ResetPlayerWindow(); inKeyFrame = false; } }
public void TestStateOutsideSetup() { StateWorker stateWorker = new StateWorker(); mState.EventDispatcher.AddListener <StatePreEnterEvent>(stateWorker.OnPreEnter); mState.EventDispatcher.AddListener <StateEnterEvent>(stateWorker.OnEnter); mState.EventDispatcher.AddListener <StatePostEnterEvent>(stateWorker.OnPostEnter); mState.EventDispatcher.AddListener <StatePreUpdateEvent>(stateWorker.OnPreUpdate); mState.EventDispatcher.AddListener <StateUpdateEvent>(stateWorker.OnUpdate); mState.EventDispatcher.AddListener <StatePostUpdateEvent>(stateWorker.OnPostUpdate); mState.EventDispatcher.AddListener <StatePreExitEvent>(stateWorker.OnPreExit); mState.EventDispatcher.AddListener <StateExitEvent>(stateWorker.OnExit); mState.EventDispatcher.AddListener <StatePostExitEvent>(stateWorker.OnPostExit); Assert.That(stateWorker.mOnPreEnterCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnEnterCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnPostEnterCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnPreUpdateCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnUpdateCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnPostUpdateCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnPreExitCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnExitCalledCount, Is.EqualTo(0)); Assert.That(stateWorker.mOnPostExitCalledCount, Is.EqualTo(0)); StateChangeArgs stateChangeDetails = new StateChangeArgs(null, null, null, null, null); mState.RaisePreEnterEvent(stateChangeDetails); mState.RaiseEnterEvent(stateChangeDetails); mState.RaisePostEnterEvent(stateChangeDetails); mState.RaisePreUpdateEvent(); mState.RaiseUpdateEvent(); mState.RaisePostUpdateEvent(); mState.RaisePreExitEvent(stateChangeDetails); mState.RaiseExitEvent(stateChangeDetails); mState.RaisePostExitEvent(stateChangeDetails); Assert.That(stateWorker.mOnPreEnterCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnEnterCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnPostEnterCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnPreUpdateCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnUpdateCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnPostUpdateCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnPreExitCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnExitCalledCount, Is.EqualTo(1)); Assert.That(stateWorker.mOnPostExitCalledCount, Is.EqualTo(1)); for (int i = 0; i < 10; i++) { mState.RaiseUpdateEvent(); } Assert.That(stateWorker.mOnUpdateCalledCount, Is.EqualTo(11)); }
protected virtual void OnStateChanged(object o, StateChangeArgs args) { if (args.Playing) { playbutton.Hide(); pausebutton.Show(); } else { playbutton.Show(); pausebutton.Hide(); } if (PlayStateChanged != null) { PlayStateChanged(this, args.Playing); } }
/// <summary> /// 改变游戏状态,进行改变的处理 /// </summary> /// <param name="eGameState"></param> /// <param name="loadingStyle"></param> /// <param name="callBackWhenChangeFinished"></param> public void ChangeGameState(EnumGameState eGameState, ELoadingStyle loadingStyle, Action callBackWhenChangeFinished) { if (this.IsChangingState) { StateChangeArgs item = new StateChangeArgs { GameState = eGameState, LoadingStyle = loadingStyle, CallBack = callBackWhenChangeFinished }; this.m_GameStateQueue.Enqueue(item); } else { this.m_ClientStateMachine.ConvertToState(eGameState, loadingStyle, callBackWhenChangeFinished); this.RegisterCallBackOnChangedFinished(new Action(this.ChangeGameStateQueue)); } }
private void DoTransition(TS state, TT input, bool isPop) { if (state == null || input == null) { return; } var old = Model.Current; if (Model.StackEnabled && isPop) { Model.Stack.Pop(); Model.Current = Model.Stack.Peek(); } else { Model.Current = Model.States[state]; if (Model.StackEnabled) { Model.Stack.Push(Model.Current); } } if (Model.StackEnabled && Model.Current.ClearStack) { Model.Stack.Clear(); } if (Model.Current.Equals(old)) { return; } var args = new StateChangeArgs <TS, TT>(this, old, Model.Current, input); Exited(old, args); Entered(args); StateChanged(args); }
public static void ConsoleOut <TS, TT>(object sender, StateChangeArgs <TS, TT> e) { Console.Out.WriteLine($"From [{e.From}] with [{e.Input}] to [{e.To}]"); }
public StatePostEnterEvent(StateChangeArgs args) { mArgs = args; }
private void StateChanged(StateChangeArgs <TS, TT> args) { Model.RaiseStateChanged(args); }
private void Exited(State <TS, TT> old, StateChangeArgs <TS, TT> args) { old.RaiseExited(args); }
private void Entered(StateChangeArgs <TS, TT> args) { ResetCurrentAfterEntries(); Model.Current.RaiseEntered(args); }
public StateExitEvent(StateChangeArgs args) { mArgs = args; }
public void RaiseStateChanged(StateChangeArgs <TS, TT> e) => StateChanged?.Invoke(this, e);
public void RaiseExited(StateChangeArgs <TS, TT> e) => Exited?.Invoke(e);