예제 #1
0
        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);
        }
예제 #2
0
        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);
        }