Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    /// <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);
    }
Exemplo n.º 3
0
    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);
    }