Ejemplo n.º 1
0
 // 第二层状态: 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;
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        // 沿着指定方向行走
        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);
        }