internal void Init(BattleCore _battleCore, Unit _parent, ITurrentSDS _sds, int _pos, int _time) { battleCore = _battleCore; parent = _parent; sds = _sds; pos = _pos; time = _time + _parent.sds.GetCd(); if (sds.GetAttackDamageAdd() > 0) { lastTargetDic = new Dictionary <KeyValuePair <int, int>, int>(); } }
private bool DoAction(out BattleAttackVO _vo) { Dictionary <KeyValuePair <int, int>, int> recDic = null; if (sds.GetAttackDamageAdd() > 0) { recDic = lastTargetDic; lastTargetDic = new Dictionary <KeyValuePair <int, int>, int>(); } List <int> result = BattlePublicTools.GetTurrentAttackTargetList(battleCore, parent.isMine, sds, pos); if (result != null) { Turrent[] oppTurrent = parent.isMine ? battleCore.oTurrent : battleCore.mTurrent; List <KeyValuePair <int, int> > damageDataList = new List <KeyValuePair <int, int> >(); for (int i = 0; i < result.Count; i++) { int targetPos = result[i]; if (targetPos < 0) { if (sds.GetAttackDamageAdd() > 0) { if (!lastTargetDic.ContainsKey(new KeyValuePair <int, int>(-1, -1))) { int lastTargetTime; if (recDic.TryGetValue(new KeyValuePair <int, int>(-1, -1), out lastTargetTime)) { lastTargetDic.Add(new KeyValuePair <int, int>(-1, -1), lastTargetTime); } else { lastTargetDic.Add(new KeyValuePair <int, int>(-1, -1), time); } } } int damage = DamageBase(); damageDataList.Add(new KeyValuePair <int, int>(-1, damage)); } else { Turrent targetTurrent = oppTurrent[targetPos]; if (sds.GetAttackDamageAdd() > 0) { if (!lastTargetDic.ContainsKey(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos))) { int lastTargetTime; if (recDic.TryGetValue(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), out lastTargetTime)) { lastTargetDic.Add(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), lastTargetTime); } else { lastTargetDic.Add(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), time); } } } int damage = DamageTurrent(targetTurrent); damageDataList.Add(new KeyValuePair <int, int>(targetPos, damage)); } } _vo = new BattleAttackVO(parent.isMine, pos, damageDataList); return(true); } else { _vo = new BattleAttackVO(); return(false); } }