/// <summary> /// 巡逻 /// </summary> /// <param name="currentIsCenterPos">当前坐标是否是巡逻中心点坐标</param> /// <returns></returns> public BehaviourReturnCode ActionPatrol(bool currentIsCenterPos) { if (RunningProperty.SelfActor is LocalPlayer) { // 定点挂机 if (HookSettingManager.Instance.RangeType == EHookRangeType.FixedPos) { return(BehaviourReturnCode.Success); } // 副本类型控制表配置是否要巡逻 else if (DBInstanceTypeControl.Instance.DoNotPatrol(InstanceManager.Instance.InstanceType, InstanceManager.Instance.InstanceSubType) == true) { return(BehaviourReturnCode.Success); } } BehaviourPatrolFiniteState patrolState = RunningProperty.AI.Machine.GetState <BehaviourPatrolFiniteState>(BehaviourMachine.State.PATROL); if (currentIsCenterPos) { patrolState.PresetCenterPos = RunningProperty.SelfActorPos; } RunningProperty.AI.Machine.SwitchToState(BehaviourMachine.State.PATROL); return(BehaviourReturnCode.Success); }
public BehaviourMachine(BehaviourAI ai) { mAI = ai; mStandState = new BehaviourStandFiniteState(ai.RunningProperty); mWalkState = new BehaviourWalkFiniteState(ai.RunningProperty); mAttackState = new BehaviourAttackFiniteState(ai.RunningProperty); mRunState = new BehaviourRunFiniteState(ai.RunningProperty); mChaseTargetState = new BehaviourChaseTargetFiniteState(ai.RunningProperty); mPatrolState = new BehaviourPatrolFiniteState(ai.RunningProperty); mFollowState = new BehaviourFollowFiniteState(ai.RunningProperty); mEmptyState = new BehaviourEmptyFiniteState(ai.RunningProperty); mEscapeState = new BehaviourEscapeFiniteState(ai.RunningProperty); mMachine.AddState(State.WALK, mWalkState); mMachine.AddState(State.RUN, mRunState); mMachine.AddState(State.STAND, mStandState); mMachine.AddState(State.ATTACK, mAttackState); mMachine.AddState(State.CHASETARGET, mChaseTargetState); mMachine.AddState(State.PATROL, mPatrolState); mMachine.AddState(State.FOLLOW, mFollowState); mMachine.AddState(State.EMPTY, mEmptyState); mMachine.AddState(State.ESCAPE, mEscapeState); }