|
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)
|
{
|
|
}
|
|
public override void AfterAddToQueue()
|
{
|
base.AfterAddToQueue();
|
}
|
|
protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
|
{
|
List<BattleObject> rebornTargets = new List<BattleObject>();
|
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.ObjID, ownRecordAction);
|
rebornTargets.Add(battleObject);
|
}
|
}
|
|
RebornRecordAction recordAction = new RebornRecordAction(battleField, rebornTargets, () =>
|
{
|
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)
|
{
|
battleField.OnObjReborn(tagUseSkillAttack.HurtList[i].ObjID);
|
|
// 如果是 HeroBattleObject,更新其 curHp 和 isDead
|
if (battleObject is HeroBattleObject heroBattleObject)
|
{
|
heroBattleObject.SetCurHp(GeneralDefine.GetFactValue(hurt.CurHP, hurt.CurHPEx));
|
heroBattleObject.SetIsDead(false);
|
}
|
}
|
}
|
});
|
|
|
battleField.recordPlayer.ImmediatelyPlay(recordAction);
|
|
|
bool vValue = true;
|
|
// 处理主目标列表
|
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, vValue);
|
vValue = false;
|
}
|
}
|
|
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;
|
}
|
|
|
}
|