public override bool ExternalCondition(BTreeTemplateData input) { var _input = (BTreeInputData)input; var troop = _input.troop; var battleData = _input.battleData; if (troop.targetKey != 0) { TroopData tarTroop = battleData.mAllTroopDic[troop.targetKey]; if (tarTroop == null) { return(false); } uint atkDis = TroopHelper.GetTroopAtkDis(troop.type); uint myRange = TroopHelper.GetTroopRange(troop.type); uint tarRange = TroopHelper.GetTroopRange(tarTroop.type); int dis = MathHelper.TroopDistanceV2(troop, tarTroop); if (dis > atkDis + myRange + tarRange) { return(false); } else { return(true); } } return(false); }
public override Enum Enter(ref FSMInputData _input) { var troop = _input.m_Troop; if (troop.targetKey != 0) { TroopData tarTroop = dataMgr.m_BattleData.mAllTroopDic[troop.targetKey]; if (tarTroop == null) { Debugger.LogError("AttackState 未找到目标"); } uint atkDis = TroopHelper.GetTroopAtkDis(troop.type); uint myRange = TroopHelper.GetTroopRange(troop.type); uint tarRange = TroopHelper.GetTroopRange(tarTroop.type); int dis = MathHelper.TroopDistanceV2(troop, tarTroop); if (dis > atkDis + myRange + tarRange) { return(TroopFSMState.Move); } else { return(Excute(ref _input)); } } return(TroopFSMState.End); }