BuffBasic.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. using System;
  2. using System.Collections.Generic;
  3. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using UnityEngine;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace GameLogic.Combat.Buff
  9. {
  10. public class BuffBasic : CObject
  11. {
  12. public CombatHeroEntity Source
  13. {
  14. get { return source; }
  15. }
  16. public CombatHeroEntity CombatHeroEntity
  17. {
  18. get { return combatHeroEntity; }
  19. }
  20. protected CombatHeroEntity combatHeroEntity;
  21. public BuffInfo buffInf;
  22. protected CombatHeroEntity source;
  23. protected TriggerData _triggerData;
  24. public float _currTime;
  25. protected float _jianGe;
  26. public System.Action buffFinish;
  27. private List<BuffStackInfo> _buffStackInfos = new List<BuffStackInfo>();
  28. public int buffCount
  29. {
  30. get { return _count; }
  31. }
  32. protected int _count;
  33. private float _time;
  34. public void Init(CombatHeroEntity combatHeroEntity, CombatHeroEntity source, BuffInfo buffInfo)
  35. {
  36. _triggerData.Source = this;
  37. this.combatHeroEntity = combatHeroEntity;
  38. this.buffInf = buffInfo;
  39. this.source = source;
  40. ProInit();
  41. AddBuffCount(source, buffInfo);
  42. }
  43. public void AddBuffCount(CombatHeroEntity source, BuffInfo buffInfo)
  44. {
  45. if (buffInfo.BuffConfig.timeType == 1)
  46. {
  47. _currTime = 0;
  48. int c = buffCount + buffInfo.count;
  49. if (c > buffInfo.BuffConfig.overlayCount)
  50. {
  51. c = buffInfo.BuffConfig.overlayCount - buffCount;
  52. }
  53. else
  54. {
  55. c = buffInfo.count;
  56. }
  57. if (c <= 0)
  58. {
  59. return;
  60. }
  61. _count += c;
  62. }
  63. else
  64. {
  65. int c = buffCount + buffInfo.count;
  66. if (c > buffInfo.BuffConfig.overlayCount)
  67. {
  68. c = buffInfo.BuffConfig.overlayCount - buffCount;
  69. }
  70. else
  71. {
  72. c = buffInfo.count;
  73. }
  74. if (c <= 0)
  75. {
  76. return;
  77. }
  78. buffInfo.count = c;
  79. _count += c;
  80. BuffStackInfo buffStackInfo = CObjectPool.Instance.Fetch<BuffStackInfo>();
  81. buffStackInfo.BuffBasic = this;
  82. buffStackInfo.BuffInfo = buffInfo;
  83. buffStackInfo.count = c;
  84. _buffStackInfos.Add(buffStackInfo);
  85. }
  86. UpdateEffect();
  87. }
  88. protected virtual void ProInit()
  89. {
  90. }
  91. public override void ActiveObj()
  92. {
  93. }
  94. public void UpdateEffect()
  95. {
  96. ProUpdateEffect();
  97. }
  98. protected virtual void ProUpdateEffect()
  99. {
  100. }
  101. public void ReduceCount(int count)
  102. {
  103. if (buffInf.BuffConfig.timeType == 1)
  104. {
  105. _count -= count;
  106. if (_count <= 0)
  107. {
  108. combatHeroEntity.BuffControl.RemoveBuff(this);
  109. return;
  110. }
  111. }
  112. else
  113. {
  114. while (count > 0)
  115. {
  116. if (_buffStackInfos.Count <= 0)
  117. {
  118. combatHeroEntity.BuffControl.RemoveBuff(this);
  119. return;
  120. }
  121. BuffStackInfo buffStackInfo = _buffStackInfos[0];
  122. if (buffStackInfo.count >= count)
  123. {
  124. buffStackInfo.count -= count;
  125. _count -= count;
  126. count = 0;
  127. if (buffStackInfo.count == 0)
  128. {
  129. RemoveBuffStackInfo(buffStackInfo);
  130. }
  131. }
  132. else
  133. {
  134. int c = buffStackInfo.count;
  135. count -= c;
  136. _count -= c;
  137. buffStackInfo.count = 0;
  138. RemoveBuffStackInfo(buffStackInfo);
  139. }
  140. }
  141. }
  142. UpdateEffect();
  143. }
  144. public TimeLineEventLogicGroupBasic ActivationTimeLineData(string groupName,
  145. BetterList<ILifetCycleHitPoint> currTarget = null,
  146. Vector3[] customizePos = null, System.Action finishCallBack = null, float startTime = default,
  147. object extraData = null, int indexCount = 0)
  148. {
  149. TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
  150. source.combatHeroTimeLineControl
  151. .GetTimeLineEventLogicGroup<TimeLineEventLogicGroupBasic>(groupName, null);
  152. try
  153. {
  154. if (timeLineEventLogicGroup != null)
  155. {
  156. timeLineEventLogicGroup.extraData = extraData;
  157. timeLineEventLogicGroup.SetCombatInfo(combatHeroEntity, null, currTarget, _triggerData,
  158. customizePos, indexCount);
  159. timeLineEventLogicGroup.TimeLineUpdateEnd = finishCallBack;
  160. timeLineEventLogicGroup.timeLineTime = startTime;
  161. combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
  162. // currUseAllTimeLineLogic.Add(timeLineEventLogicGroup);
  163. }
  164. }
  165. catch (Exception e)
  166. {
  167. LogTool.Error(e);
  168. }
  169. return timeLineEventLogicGroup;
  170. }
  171. public override void DormancyObj()
  172. {
  173. buffFinish?.Invoke();
  174. buffFinish = null;
  175. _currTime = 0;
  176. ProDormancyObj();
  177. CObjectPool.Instance.Recycle(buffInf);
  178. buffInf = null;
  179. combatHeroEntity = null;
  180. }
  181. protected virtual void ProDormancyObj()
  182. {
  183. }
  184. public void Update(float t)
  185. {
  186. if (buffInf.BuffConfig.timeType == 1)
  187. {
  188. _currTime += t;
  189. if (buffInf.buffTime > 0 && _currTime > buffInf.buffTime)
  190. {
  191. DelectBuff();
  192. return;
  193. }
  194. }
  195. else
  196. {
  197. for (int i = 0; i < _buffStackInfos.Count; i++)
  198. {
  199. BuffStackInfo buffStackInfo = _buffStackInfos[i];
  200. buffStackInfo.Update(t);
  201. }
  202. }
  203. if (buffInf == null)
  204. {
  205. return;
  206. }
  207. if (_jianGe > 0)
  208. {
  209. _time += t;
  210. if (_time >= _jianGe)
  211. {
  212. _time -= _jianGe;
  213. UpdateJumping();
  214. }
  215. }
  216. ProUpdate(t);
  217. }
  218. public void DelectBuff()
  219. {
  220. combatHeroEntity.BuffControl.RemoveBuff(this);
  221. }
  222. public void RemoveBuffStackInfo(BuffStackInfo buffStackInfo)
  223. {
  224. _buffStackInfos.Remove(buffStackInfo);
  225. _count -= buffStackInfo.count;
  226. CObjectPool.Instance.Recycle(buffStackInfo);
  227. if (_buffStackInfos.Count <= 0)
  228. {
  229. combatHeroEntity.BuffControl.RemoveBuff(this);
  230. return;
  231. }
  232. UpdateEffect();
  233. }
  234. protected virtual void UpdateJumping()
  235. {
  236. }
  237. protected virtual void ProUpdate(float t)
  238. {
  239. }
  240. }
  241. }