| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using UnityEngine; | 
|   | 
|   | 
| public class BattleObjectBuffMgr | 
| { | 
|     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; | 
|   | 
|     public void Init(BattleObject _battleObject) | 
|     { | 
|         battleObject = _battleObject; | 
|     } | 
|   | 
|     public void Release() | 
|     { | 
|   | 
|     } | 
|   | 
|     public void Run() | 
|     { | 
|         //  跟随BattleObject | 
|         foreach (var kv in buffEffectDict) | 
|         { | 
|             // foreach (var kv2 in effectDict) | 
|             { | 
|                 BattleEffectPlayer effectPlayer = kv.Value.Key; | 
|                 effectPlayer.transform.position = battleObject.heroRectTrans.position; | 
|                 var effectPos = effectPlayer.effectConfig.effectPos; | 
|                 if (null != effectPos && effectPos.Length >= 2) | 
|                 { | 
|                     effectPlayer.rectTrans.anchoredPosition += new Vector2(effectPos[0], effectPos[1]); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     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; | 
|   | 
|         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()); | 
|         } | 
|     } | 
|   | 
| } |