Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -1,10 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BattleObjectBuffMgr
{
    // private Dictionary<BuffBase, EffectPlayer> buffDict = new Dictionary<BuffBase, EffectPlayer>();
    private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
    private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
    private BattleObject battleObject;
@@ -18,23 +22,121 @@
    }
    //  增加buff
    public void AddBuff(HB428_tagSCBuffRefresh vNetData)
    public void Run()
    {
        // BuffBase buffBase = BuffFactory.CreateBuff(vNetData, battleObject);
        // if (null == buffBase)
        // {
        //     return;
        // }
        //  跟随BattleObject
        foreach (var kv in buffEffectDict)
        {
            // foreach (var kv2 in effectDict)
            {
                BattleEffectPlayer effectPlayer = kv.Value.Key;
                effectPlayer.transform.position = battleObject.heroRectTrans.position;
            }
        }
    }
        // buffBase.OnAdd();
    public void RemoveAllBuff()
    {
        foreach (var kv in buffEffectDict)
        {
            KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair = kv.Value;
            battleObject.battleField.battleEffectMgr.RemoveEffect(kv.Key, pair.Key);
        }
        buffEffectDict.Clear();
        buffDataDict.Clear();
        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
    }
    //  删除buff
    public void RemoveBuff(HB429_tagSCBuffDel vNetData)
    {
        HB428_tagSCBuffRefresh buffData = null;
        // buffBase.OnRemove();
        if (buffDataDict.TryGetValue(vNetData.BuffID, out buffData))
        {
            buffDataDict.Remove(vNetData.BuffID);
        }
        if (buffData != null)
        {
            SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
            if (null == skillConfig || skillConfig.BuffEffect <= 0)
            {
                return;
            }
            KeyValuePair<BattleEffectPlayer, HashSet<uint>> effectPair;
            if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out effectPair))
            {
                effectPair.Value.Remove(vNetData.BuffID);
                if (effectPair.Value.Count == 0)
                {
                    //  没有这个buff了
                    battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.BuffEffect, effectPair.Key);
                    buffEffectDict.Remove(skillConfig.BuffEffect);
                }
            }
        }
        //  不做表现
        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
    }
    //  刷新buff
    public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
    {
        SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
        if (null == skillConfig)
        {
            Debug.LogError("buff对应的技能不存在,skillId : " + vNetData.SkillID);
            return;
        }
        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, () =>
            {
                if (null != skillConfig && skillConfig.BuffEffect > 0)
                {
                    //  已经存在相同的buff特效
                    if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair))
                    {
                        pair.Value.Add(vNetData.BuffID);
                    }
                    else
                    {
                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
                        HashSet<uint> buffIdSet = new HashSet<uint>();
                        buffIdSet.Add(vNetData.BuffID);
                        buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
                    }
                }
                battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
            });
            battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
        }
        else
        {
            //  已经存在的buff 刷新
            battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
        }
    }
}