| | |
| | | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using System; |
| | | using System.Linq; |
| | | |
| | | public class DirectlyDamageSkill : SkillBase |
| | | { |
| | | protected SkillEffect skillEffect; |
| | | |
| | | public DirectlyDamageSkill(SkillConfig _skillCfg) : base(_skillCfg) |
| | | public DirectlyDamageSkill(BattleObject _caster, SkillConfig _skillCfg, |
| | | HB427_tagSCUseSkill _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField) |
| | | : base(_caster, _skillCfg, _vNetData, _packList, _battleField) |
| | | { |
| | | foreach (var pack in packList) |
| | | { |
| | | Debug.LogError("directly damage skill pack type is " + pack.GetType()); |
| | | } |
| | | } |
| | | |
| | | public override void Run() |
| | | { |
| | | if (null != skillEffect) |
| | | { |
| | | skillEffect.Run(); |
| | | } |
| | | |
| | | base.Run(); |
| | | } |
| | | |
| | | |
| | | // 技能动画播放完毕 |
| | | protected override void DoSkillLogic(Action _onComplete = null) |
| | | { |
| | | // if (skillConfig.EffectId > 0) |
| | | // { |
| | | // // 播放技能特效 |
| | | // caster.battleField.battleEffectMgr.PlayEffect( |
| | | // caster.ObjID, |
| | | // skillConfig.EffectId, |
| | | // caster.heroGo.transform |
| | | // ); |
| | | // } |
| | | |
| | | _onComplete?.Invoke(); |
| | | } |
| | | |
| | | // 前摇结束 |
| | | protected override void OnStartSkillFrame() |
| | | { |
| | | skillEffect = SkillEffectFactory.CreateSkillEffect( |
| | | caster, |
| | | skillConfig, |
| | | tagUseSkillAttack |
| | | ); |
| | | if (skillEffect != null) |
| | | { |
| | | skillEffect.Play(OnHitTargets); |
| | | } |
| | | } |
| | | |
| | | protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList) |
| | | { |
| | | base.OnHitTargets(_hitIndex, hitList); |
| | | } |
| | | |
| | | protected override void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | base.OnHitEachTarget(target, totalDamage, damageList, ref hurt); |
| | | } |
| | | |
| | | |
| | | // 中摇结束 |
| | | protected override void OnActiveSkillFrame() |
| | | { |
| | | |
| | | } |
| | | |
| | | public override void Run() |
| | | { |
| | | base.Run(); |
| | | } |
| | | |
| | | public override void Cast(BattleObject _caster, BattleField _battleField, List<Dictionary<int, List<int>>> damageList) |
| | | // 后摇结束 |
| | | protected override void OnEndSkillFrame() |
| | | { |
| | | _caster.PlaySkill(skillConfig, damageList, OnSkillAnimationFinished); |
| | | |
| | | } |
| | | |
| | | protected void OnSkillAnimationFinished() |
| | | { |
| | | isFinished = true; |
| | | } |
| | | |
| | | #if UNITY_EDITOR |
| | | // 伤害列表理应由服务器发给客户端 这边只做粗浅模拟 |
| | | public override List<Dictionary<int, List<int>>> GetDamageList(BattleObject _caster, BattleField battleField) |
| | | { |
| | | List<Dictionary<int, List<int>>> damageList = new List<Dictionary<int, List<int>>>(); |
| | | |
| | | List<BattleObject> affectList = GetTargetList(_caster, battleField); |
| | | |
| | | Dictionary<int, List<int>> oneRoundDamage = new Dictionary<int, List<int>>(); |
| | | |
| | | for (int j = 0; j < affectList.Count; j++) |
| | | { |
| | | BattleObject obj = affectList[j]; |
| | | List<int> tryDmgList = _caster.TryAttack(obj, skillConfig); |
| | | oneRoundDamage.Add(obj.BattleObjectId, tryDmgList); |
| | | } |
| | | |
| | | damageList.Add(oneRoundDamage); |
| | | |
| | | return damageList; |
| | | } |
| | | #endif |
| | | } |