/// <summary> /// 逃跑,顺便可以放个Buff /// </summary> /// <param name="skillId"></param> /// <returns></returns> public BehaviourReturnCode ActionEscape(uint buffId) { BehaviourEscapeFiniteState escapeState = RunningProperty.AI.Machine.GetState <BehaviourEscapeFiniteState>(BehaviourMachine.State.ESCAPE); if (escapeState != null) { escapeState.EnterBuffId = buffId; } RunningProperty.AI.Machine.SwitchToState(BehaviourMachine.State.ESCAPE); float ratio = (float)((double)(RunningProperty.SelfActor.FullLife - RunningProperty.SelfActor.CurLife) / (double)RunningProperty.SelfActor.FullLife); BehaviourMonsterAI monsterAI = RunningProperty.AI as BehaviourMonsterAI; if (monsterAI.EscapeHpRationBeacon <= 0.0f) { monsterAI.CurrentEscapeCount = int.MaxValue; } else { monsterAI.CurrentEscapeCount = (int)(ratio / monsterAI.EscapeHpRationBeacon); } 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); }