yyl
9 天以前 6a10188f3eddc740b9b8b1e7eefb0e2fdb3850e3
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
116
117
118
119
120
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
 
 
public class BattleObjectBuffMgr
{
    // buffId, effectId, EffectPlayer
    private Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict = new Dictionary<uint, Dictionary<int, BattleEffectPlayer>>();
 
 
    //  buffId, buffdata
    private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
 
    private BattleObject battleObject;
 
    public void Init(BattleObject _battleObject)
    {
        battleObject = _battleObject;
    }
 
    public void Release()
    {
 
    }
 
    //  增加buff
    public void AddBuff(HB428_tagSCBuffRefresh vNetData)
    {
        // BuffBase buffBase = BuffFactory.CreateBuff(vNetData, battleObject);
        // if (null == buffBase)
        // {
        //     return;
        // }
 
        // buffBase.OnAdd();
        
    }
 
    //  删除buff
    public void RemoveBuff(HB429_tagSCBuffDel vNetData)
    {
        HB428_tagSCBuffRefresh buffData = null;
 
        if (buffDataDict.TryGetValue(vNetData.BuffID, out buffData))
        {
            buffDataDict.Remove(vNetData.BuffID);
        }
 
        if (buffData != null)
        {
            Dictionary<int, BattleEffectPlayer> effectDict = null;
 
            if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
            {
                SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
                if (null != skillConfig)
                {
                    BattleEffectPlayer effectPlayer = null;
                    if (effectDict.TryGetValue(skillConfig.EffectId, out effectPlayer))
                    {
                        battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.EffectId, effectPlayer);
                    }
                }
            }
        }
 
        //  不做表现
        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
    }
 
    public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
    {
        bool isNew = false;
        if (buffDataDict.ContainsKey(vNetData.BuffID))
        {
            buffDataDict[vNetData.BuffID] = vNetData;
        }
        else
        {
            isNew = true;
            buffDataDict.Add(vNetData.BuffID, vNetData);
        }
 
        if (isNew)
        {
            BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
            { 
                SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
                if (null != skillConfig && skillConfig.EffectId > 0)
                {
                    // Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict
                    Dictionary<int, BattleEffectPlayer> effectDict = null;
                    if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
                    {
                        //  存在这个buffid的特效字典
                        if (effectDict.ContainsKey(skillConfig.EffectId))
                        {
                            Debug.LogError("已存在同样的buff特效 " + skillConfig.EffectId);
                        }
                        else
                        {
                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                            effectDict.Add(skillConfig.EffectId, effect);
                        }
                    }
                    else
                    {
                        effectDict = new Dictionary<int, BattleEffectPlayer>();
                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                        effectDict.Add(skillConfig.EffectId, effect);
                        buffEffectDict.Add(vNetData.BuffID, effectDict);
                    }
                }
            });
            battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
        }
    }
}