hch
2025-08-11 8fa8f928f44c91c38eed9404c33fe0d85cc3b7f3
Main/System/Battle/Skill/DirectlyDamageSkill.cs
@@ -1,49 +1,84 @@
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
}