using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class BattleObjectBuffMgr { // buffId, effectId, EffectPlayer private Dictionary> buffEffectDict = new Dictionary>(); // buffId, buffdata private Dictionary buffDataDict = new Dictionary(); 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 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> buffEffectDict Dictionary 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.ObjID, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp); effectDict.Add(skillConfig.EffectId, effect); } } else { effectDict = new Dictionary(); BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject.ObjID, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp); effectDict.Add(skillConfig.EffectId, effect); buffEffectDict.Add(vNetData.BuffID, effectDict); } } }); battleObject.battleField.recordPlayer.PlayRecord(buffMountAction); } } }