123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using Common.Utility.CombatEvent;
- using Fort23.Core;
- namespace GameLogic.Combat.Buff
- {
- public class BuffControl
- {
- private BetterList<BuffBasic> _allBuff = new BetterList<BuffBasic>();
- 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;
- }
- /// <summary>
- /// 获得对应buff的数量
- /// </summary>
- /// <param name="buffType">1=buff,2=debuff 0=全部</param>
- /// <returns></returns>
- 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);
- }
- }
- }
- }
|