using Common.Utility.CombatEvent; using Fort23.Core; namespace GameLogic.Combat.Buff { public class BuffControl { private BetterList _allBuff = new BetterList(); private CombatHeroEntity _combatHeroEntity; public void Init(CombatHeroEntity combatHeroEntity) { _combatHeroEntity = combatHeroEntity; } public void AddBuff(CombatHeroEntity source, BuffInfo buffInfo) { BuffBasic buffBasic = GetBuffBasicForIdGroup(buffInfo.BuffConfig.buffGroup); if (buffBasic == null) { buffBasic = GetBuffBasic(buffInfo.BuffConfig.scriptsName); if (buffBasic == null) { return; } buffBasic.Init(_combatHeroEntity, source, buffInfo); _allBuff.Add(buffBasic); BuffEventData buffEventData = BuffEventData.Create(); buffEventData.BuffBasic = buffBasic; buffEventData.source = source; buffEventData.target = _combatHeroEntity; CombatEventManager.Instance.Dispatch(CombatEventType.AddBuff, buffEventData); } else { buffBasic.AddBuffCount(source, buffInfo); } } protected BuffBasic GetBuffBasic(string buffName) { string typeName = "GameLogic.Combat.Buff." + buffName; { System.Type type = System.Type.GetType(typeName); if (type == null) { return null; } BuffBasic sb = (BuffBasic)CObjectPool.Instance.Fetch(type); return sb; } } protected BuffBasic GetBuffBasicForIdGroup(int idGroup) { for (int i = 0; i < _allBuff.Count; i++) { BuffBasic b = _allBuff[i]; if (b.buffInf.BuffConfig.buffGroup == idGroup) { return b; } } return null; } /// /// 获得对应buff的数量 /// /// 1=buff,2=debuff 0=全部 /// public int GetBuffCountForType(int buffType) { if (buffType == 0) { return _allBuff.Count; } int c = 0; for (int i = 0; i < _allBuff.Count; i++) { if (_allBuff[i].buffInf.BuffConfig.buffType == buffType) { c++; } } return c; } public void RemoveBuff(BuffBasic buffBasic) { if (buffBasic == null) { return; } _allBuff.Remove(buffBasic); BuffEventData buffEventData = BuffEventData.Create(); buffEventData.BuffBasic = buffBasic; buffEventData.source = null; buffEventData.target = _combatHeroEntity; CombatEventManager.Instance.Dispatch(CombatEventType.RemoveBuff, buffEventData); buffBasic.Dispose(); CObjectPool.Instance.Recycle(buffBasic); } public void Update(float t) { for (int i = 0; i < _allBuff.Count; i++) { _allBuff[i].Update(t); } } } }