// 第二层状态: normal State 的子状态 public void EnterState_Idle(xc.Machine.State s) // idle State { mIsIdle = true; mOwner.FireActorEvent(Actor.ActorEvent.ENTERIDLE, null); mWalkMode = EWalkMode.EWM_Uninit; CrossFadeAnimation(mOwner.GetIdleAniOptions()); mInBattleStatus = mOwner.InBattleStatus; }
public bool WalkTo(Vector3 dst) { // 切换状态机后需要立即用到WalkMode // 所以不管状态机是否切换成功,都先设置WlakMode // 如果切换失败,再设置会原来的WalkMode EWalkMode oriWalkMode = mWalkMode; mWalkMode = EWalkMode.EWM_Dst; bool r; if (mIsWalking) { r = mMachine.CanReact((uint)EFSMEvent.DE_ResetWalk); } else { r = mMachine.CanReact((uint)EFSMEvent.DE_Walk); } if (r) { mDst = dst; mDir = (mDst - mOwnerTrans.position); mDir.y = 0; mDir.Normalize(); } else { mWalkMode = oriWalkMode; } if (mIsWalking) { r = mMachine.React((uint)EFSMEvent.DE_ResetWalk); } else { r = mMachine.React((uint)EFSMEvent.DE_Walk); } //r = r || mbWalking; return(r); }
// 沿着指定方向行走 public bool WalkAlong(Vector3 dir) { EWalkMode oriWalkMode = mWalkMode; mWalkMode = EWalkMode.EWM_Dir; bool r = mMachine.React((uint)EFSMEvent.DE_Walk); r = r || mIsWalking; if (r) { mDir = dir; mDir.Normalize(); } else { mWalkMode = oriWalkMode; } return(r); }