hch
4 天以前 1898a5f28dfffa7bbecf5d2bf024f20b8d0490e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
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;
    }
 
 
}