Beispiel #1
0
    public override bool IsTrue(TBTWorkingData wData)
    {
        BattleBehaviorWorkingData behaviorData = wData as BattleBehaviorWorkingData;
        BattleUnit             source          = behaviorData.owner;
        AutoCastAbilityRequest request         = behaviorData.request as AutoCastAbilityRequest;
        Unit    target  = request.target;
        Ability ability = request.ability;

        //目标是自己,不用转身
        if (target == source)
        {
            return(false);
        }

        AbilityBehavior abilityBehavior = ability.GetAbilityBehavior();

        //无目标技能类型
        if ((abilityBehavior & AbilityBehavior.ABILITY_BEHAVIOR_NO_TARGET) != 0)
        {
            //如果是线性或者扇形,虽然是无目标类型,也需要转向目标
            if ((abilityBehavior & AbilityBehavior.ABILITY_BEHAVIOR_DIRECTIONAL) != 0 ||
                (abilityBehavior & AbilityBehavior.ABILITY_BEHAVIOR_SECTOR_AOE) != 0)
            {
                return(true);
            }

            return(false);
        }
        return(true);
    }
Beispiel #2
0
    public override bool IsTrue(TBTWorkingData wData = null)
    {
        // 判断物体是否在视野范围内
        BattleBehaviorWorkingData data    = wData as BattleBehaviorWorkingData;
        AutoCastAbilityRequest    request = data.request as AutoCastAbilityRequest;
        BattleUnit owner  = data.owner;
        Unit       target = request.target;

        // 目标是自己
        if (target == owner)
        {
            return(true);
        }

        Ability ability      = request.ability;
        float   abilityRange = ability.GetCastRange();

        // 全屏技能
        if (abilityRange == -1)
        {
            return(true);
        }

        Vector2 ownerPos  = owner.Get2DPosition();
        Vector2 targetPos = target.Get2DPosition();
        float   distance  = (targetPos - ownerPos).magnitude;

        //BattleLog.Log(string.Format("【CON_IsInAbilityRange】距离:{0},技能范围:{1}", distance, abilityRange));
        return(distance <= abilityRange);
    }
    public override bool IsTrue(TBTWorkingData wData)
    {
        BattleBehaviorWorkingData behaviorData = wData as BattleBehaviorWorkingData;
        AutoCastAbilityRequest    request      = behaviorData.request as AutoCastAbilityRequest;

        //BattleLog.Log("【CON_CanCastAbility】能否施法:{0}", request.ability.IsCastable().ToString());
        return(request.ability.IsCastable());
    }
Beispiel #4
0
    protected override void onEnter(TBTWorkingData wData)
    {
        base.onEnter(wData);
        BattleDecisionWorkingData decisionData = wData as BattleDecisionWorkingData;
        BattleUnit caster  = decisionData.owner;
        Ability    ability = caster.SelectCastableAbility();

        if (ability == null)
        {
            // 没有技能就追逐
            var request = decisionData.request;
            if (request == null || (request != null && request.IsRequestCompleted()))
            {
                var chaseTarget = caster.target;
                if (chaseTarget == null)
                {
                    chaseTarget = TargetSearcher.instance.FindNearestEnemyUnit(caster);
                }

                if (chaseTarget != null)
                {
                    m_chaseRequest       = new ChaseRequest(chaseTarget);
                    decisionData.request = m_chaseRequest;
                }
                else
                {
                    //idle
                }
            }
        }
        else
        {
            // 寻找技能目标, 如果有目标被放逐了,可能就选不到目标!
            BattleUnit target = TargetSearcher.instance.FindTargetUnitByAbility(caster, ability);
            if (target != null)
            {
                BattleLog.Log("【NOD_UpdateRequest】选取到技能ability:{0},target:{1}", ability.GetConfigName(), target.GetName());
                m_autoCastAbilityRequest = new AutoCastAbilityRequest(ability, target);
                decisionData.request     = m_autoCastAbilityRequest;
            }
        }
    }