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); }
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()); }
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; } } }