public bool ConditionTargetIsInAttackRange() { if (RunningProperty.TargetActor == null) { return(false); } float distanceSquare = RunningProperty.GetToTargetDistanceSquare(); if (distanceSquare <= (MaxAttackDistance * MaxAttackDistance) || (RunningProperty.GetToTargetColliderDistance()) <= MaxAttackDistance) { if (distanceSquare >= (MinAttackDistance * MinAttackDistance)) { BehaviourChaseTargetFiniteState chaseState = RunningProperty.AI.Machine.CurrentState as BehaviourChaseTargetFiniteState; if (chaseState == null) { return(true); } if (chaseState.IsChasing == false) { return(true); } if (distanceSquare <= (chaseState.Radius * chaseState.Radius)) { return(true); } } } if (RunningProperty.TargetSkill != null) { if (RunningProperty.TargetSkill.GetAction(0).ActionData.SkillInfo.Target == "self") { return(true); } } return(false); }
/// <summary> /// 追逐的时间是否超过这个长度 /// </summary> /// <param name="overTime"></param> /// <returns></returns> public bool ConditionIsChasingOverrideTime(float overTime) { if (RunningProperty.AI.Machine.CurrentState.Id != BehaviourMachine.State.CHASETARGET) { return(false); } BehaviourChaseTargetFiniteState chaseState = RunningProperty.AI.Machine.CurrentState as BehaviourChaseTargetFiniteState; if (chaseState == null) { return(false); } if (chaseState.StatingDuration >= overTime) { return(true); } return(false); }
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); }