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); }
static int _m_CanReact(RealStatePtr L) { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); xc.Machine __cl_gen_to_be_invoked = (xc.Machine)translator.FastGetCSObj(L, 1); try { { uint fsmEvent = LuaAPI.xlua_touint(L, 2); bool __cl_gen_ret = __cl_gen_to_be_invoked.CanReact(fsmEvent); LuaAPI.lua_pushboolean(L, __cl_gen_ret); return(1); } } catch (System.Exception __gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e)); } }