BuffControl.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Common.Utility.CombatEvent;
  2. using Fort23.Core;
  3. namespace GameLogic.Combat.Buff
  4. {
  5. public class BuffControl
  6. {
  7. private BetterList<BuffBasic> _allBuff = new BetterList<BuffBasic>();
  8. private CombatHeroEntity _combatHeroEntity;
  9. public void Init(CombatHeroEntity combatHeroEntity)
  10. {
  11. _combatHeroEntity = combatHeroEntity;
  12. }
  13. public void AddBuff(CombatHeroEntity source, BuffInfo buffInfo)
  14. {
  15. BuffBasic buffBasic = GetBuffBasicForIdGroup(buffInfo.BuffConfig.buffGroup);
  16. if (buffBasic == null)
  17. {
  18. buffBasic = GetBuffBasic(buffInfo.BuffConfig.scriptsName);
  19. if (buffBasic == null)
  20. {
  21. return;
  22. }
  23. buffBasic.Init(_combatHeroEntity, source, buffInfo);
  24. _allBuff.Add(buffBasic);
  25. BuffEventData buffEventData = BuffEventData.Create();
  26. buffEventData.BuffBasic = buffBasic;
  27. buffEventData.source = source;
  28. buffEventData.target = _combatHeroEntity;
  29. CombatEventManager.Instance.Dispatch(CombatEventType.AddBuff, buffEventData);
  30. }
  31. else
  32. {
  33. buffBasic.AddBuffCount(source, buffInfo);
  34. }
  35. }
  36. protected BuffBasic GetBuffBasic(string buffName)
  37. {
  38. string typeName = "GameLogic.Combat.Buff." + buffName;
  39. {
  40. System.Type type = System.Type.GetType(typeName);
  41. if (type == null)
  42. {
  43. return null;
  44. }
  45. BuffBasic sb = (BuffBasic)CObjectPool.Instance.Fetch(type);
  46. return sb;
  47. }
  48. }
  49. protected BuffBasic GetBuffBasicForIdGroup(int idGroup)
  50. {
  51. for (int i = 0; i < _allBuff.Count; i++)
  52. {
  53. BuffBasic b = _allBuff[i];
  54. if (b.buffInf.BuffConfig.buffGroup == idGroup)
  55. {
  56. return b;
  57. }
  58. }
  59. return null;
  60. }
  61. /// <summary>
  62. /// 获得对应buff的数量
  63. /// </summary>
  64. /// <param name="buffType">1=buff,2=debuff 0=全部</param>
  65. /// <returns></returns>
  66. public int GetBuffCountForType(int buffType)
  67. {
  68. if (buffType == 0)
  69. {
  70. return _allBuff.Count;
  71. }
  72. int c = 0;
  73. for (int i = 0; i < _allBuff.Count; i++)
  74. {
  75. if (_allBuff[i].buffInf.BuffConfig.buffType == buffType)
  76. {
  77. c++;
  78. }
  79. }
  80. return c;
  81. }
  82. public void RemoveBuff(BuffBasic buffBasic)
  83. {
  84. if (buffBasic == null)
  85. {
  86. return;
  87. }
  88. _allBuff.Remove(buffBasic);
  89. BuffEventData buffEventData = BuffEventData.Create();
  90. buffEventData.BuffBasic = buffBasic;
  91. buffEventData.source = null;
  92. buffEventData.target = _combatHeroEntity;
  93. CombatEventManager.Instance.Dispatch(CombatEventType.RemoveBuff, buffEventData);
  94. buffBasic.Dispose();
  95. CObjectPool.Instance.Recycle(buffBasic);
  96. }
  97. public void Update(float t)
  98. {
  99. for (int i = 0; i < _allBuff.Count; i++)
  100. {
  101. _allBuff[i].Update(t);
  102. }
  103. }
  104. }
  105. }