|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using System.Linq;
|
|
public class RebornSkill : SkillBase
|
{
|
|
public RebornSkill(BattleObject _caster, SkillConfig _skillCfg,
|
HB427_tagSCUseSkill _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField)
|
: base(_caster, _skillCfg, _vNetData, _packList, _battleField)
|
{
|
|
}
|
|
protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
|
{
|
for (int i = 0; i < hitList.Count; i++)
|
{
|
var hurt = hitList[i];
|
BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)hitList[i].ObjID);
|
if (battleObject != null)
|
{
|
battleObject.OnReborn(hurt, hurt.ObjID == caster.teamHero.ObjID);
|
}
|
}
|
|
// 处理主目标列表
|
foreach (var hurt in hitList)
|
{
|
BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
|
if (target == null)
|
{
|
Debug.LogError("目标为空 target == null ObjId : " + hurt.ObjID);
|
continue;
|
}
|
OnHitEachTarget(_hitIndex, target, hurt);
|
}
|
}
|
|
protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
|
{
|
BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, null, null);
|
|
// 先调用目标受伤
|
target.Hurt(hurtParam);
|
|
// 再调用施法者吸血/反伤
|
caster.OnHurtTarget(hurtParam);
|
}
|
|
public override void Cast()
|
{
|
bool isCasterReborn = IsRebornTarget(caster);
|
|
// 如果是复活施法者 先调用预复活 把角色显示出来回到idle动画
|
if (isCasterReborn)
|
{
|
caster.PreReborn(true);
|
}
|
|
// for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
|
// {
|
// var hurt = tagUseSkillAttack.HurtList[i];
|
// BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.HurtList[i].ObjID);
|
// if (battleObject != null)
|
// {
|
// battleObject.PreReborn();
|
// }
|
// }
|
base.Cast();
|
}
|
|
private bool IsRebornTarget(BattleObject _battleObj)
|
{
|
if (null == _battleObj) return false;
|
|
for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
|
{
|
var hurt = tagUseSkillAttack.HurtList[i];
|
BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.HurtList[i].ObjID);
|
if (battleObject.ObjID == _battleObj.ObjID)
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
|
public override void OnMiddleFrameStart(int times)
|
{
|
skillEffect.OnMiddleFrameStart(times); // 修复:添加空值检查
|
}
|
|
// 技能中摇结束回调:通知技能效果处理中摇结束
|
public override void OnMiddleFrameEnd(int times, int hitIndex)
|
{
|
skillEffect.OnMiddleFrameEnd(times, hitIndex); // 修复:添加空值检查
|
}
|
|
public override void OnFinalFrameEnd()
|
{
|
skillEffect?.OnFinalFrameEnd(); // 修复:添加空值检查
|
}
|
|
}
|