CombatHeroSkillControl.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. using System;
  2. using System.Collections.Generic;
  3. using Common.Utility.CombatEvent;
  4. using Excel2Json;
  5. using Fort23.Core;
  6. using Fort23.Mono;
  7. using Fort23.UTool;
  8. using GameLogic.Combat.CombatTool;
  9. using GameLogic.Combat.Skill;
  10. using UnityEngine;
  11. namespace GameLogic.Combat.Hero
  12. {
  13. public class CombatHeroSkillControl : CombatHeroSkillControlBasic
  14. {
  15. /// <summary>
  16. /// 技能指令,0表示没有技能;
  17. /// </summary>
  18. private BetterList<SkillBasic> SkillCommands = new BetterList<SkillBasic>();
  19. /// <summary>
  20. /// 当前能使用的技能
  21. /// </summary>
  22. public SkillBasic currUseSkill;
  23. public float NormalAttSpeedScale;
  24. private BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();
  25. // private BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();
  26. private int _currUseQueueIndex = 0;
  27. protected override async CTask ProInit()
  28. {
  29. NormalAttSpeedScale = 2;
  30. CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
  31. List<int> skillId = _combatHeroEntity.CurrCombatHeroInfo.unLockSkills;
  32. if (skillId != null)
  33. {
  34. for (int i = 0; i < skillId.Count; i++)
  35. {
  36. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillId[i]);
  37. SkillBasic skillBasic = AddSkill(skillConfig);
  38. if (skillBasic == null)
  39. {
  40. continue;
  41. }
  42. _skillQueue.Add(skillBasic);
  43. if (!string.IsNullOrEmpty(skillConfig.scriptName))
  44. {
  45. cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(
  46. skillConfig.timelineName + ".txt",
  47. delegate(AssetHandle handle)
  48. {
  49. if (handle != null)
  50. {
  51. TextAsset textAsset = handle.AssetObject<TextAsset>();
  52. TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);
  53. timeLienData.DeserializeData();
  54. handle.Release();
  55. _combatHeroEntity.combatHeroTimeLineControl.AddTimeLienData(timeLienData);
  56. }
  57. }));
  58. }
  59. }
  60. }
  61. await cTaskAwaitBuffer.WaitAll();
  62. }
  63. public void UpdateSkill(List<int> skillIDs)
  64. {
  65. for (int i = 0; i < skillIDs.Count; i++)
  66. {
  67. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillIDs[i]);
  68. // SkillConfig skillConfig = skillIDs[i];
  69. SkillBasic skillBasic = GetSkillBasic(skillConfig.IDGroup);
  70. if (skillBasic == null)
  71. {
  72. AddSkill(skillConfig);
  73. }
  74. else
  75. {
  76. skillBasic.InitSkillConfig(skillConfig);
  77. skillBasic.InitSkill(_combatHeroEntity);
  78. }
  79. }
  80. }
  81. public void AddCommandSkill(SkillBasic skill)
  82. {
  83. SkillCommands.Add(skill);
  84. }
  85. public void RemoveCommandSkill(SkillBasic skill)
  86. {
  87. SkillCommands.Remove(skill);
  88. }
  89. public void ClearCommandSkill()
  90. {
  91. SkillCommands.Clear();
  92. }
  93. public void UseSkill(SkillBasic skill)
  94. {
  95. CombatUseSkillEventData combatUseSkillEventData = CombatUseSkillEventData.Create();
  96. combatUseSkillEventData.useSkill = skill;
  97. CombatEventManager.Instance.Dispatch(CombatEventType.UseSkill, combatUseSkillEventData);
  98. currUseSkill = skill;
  99. skill.UseSkill();
  100. if (skill.SelfSkillConfig.SkillType == 1)
  101. {
  102. SetNormalAttCd();
  103. }
  104. }
  105. /// <summary>
  106. /// 判断是否有技能可释放
  107. /// </summary>
  108. /// <returns></returns>
  109. public SkillBasic CanReleaseSkill()
  110. {
  111. // if (_combatHeroEntity.IsControl())
  112. // {
  113. // return null;
  114. // }
  115. if (!_combatHeroEntity.IsEnemy && _combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
  116. {
  117. return null;
  118. }
  119. SkillBasic skillBasic = null;
  120. for (int i = 0; i < SkillCommands.size; i++)
  121. {
  122. skillBasic = SkillCommands[i];
  123. break;
  124. }
  125. return skillBasic;
  126. }
  127. public void StartPolling()
  128. {
  129. for (int i = 0; i < _skillQueue.size; i++)
  130. {
  131. SkillBasic skillBasic = allSkill[i];
  132. skillBasic.PollingInitBefore(_skillQueue);
  133. }
  134. for (int i = 0; i < _skillQueue.size; i++)
  135. {
  136. SkillBasic skillBasic = allSkill[i];
  137. skillBasic.PollingInit(_skillQueue);
  138. }
  139. _currUseQueueIndex = 0;
  140. }
  141. protected override void ProUpdate(float t)
  142. {
  143. if (currUseSkill == null && SkillCommands.Count <= 0)
  144. {
  145. while (_currUseQueueIndex < _skillQueue.Count && SkillCommands.Count <= 0)
  146. {
  147. SkillBasic skillBasic = _skillQueue[_currUseQueueIndex];
  148. if (skillBasic.SelfSkillConfig.SkillType == 1)
  149. {
  150. if (skillBasic.IsCanUse())
  151. {
  152. AddCommandSkill(skillBasic);
  153. }
  154. }
  155. _currUseQueueIndex++;
  156. }
  157. }
  158. if (_currUseQueueIndex >= _skillQueue.Count)
  159. {
  160. StartPolling();
  161. }
  162. }
  163. public void SetNormalAttCd()
  164. {
  165. // if (NormalAttack == null)
  166. // {
  167. // return;
  168. // }
  169. //
  170. // string timeLineName = "attack";
  171. // float maxTime = _combatHeroEntity.combatHeroTimeLineControl.TimeLineData.GetTimeLineEventLogicGroupForTime(
  172. // timeLineName, null);
  173. // float attackSpeed = _combatHeroEntity.CurrCombatHeroInfo.attSpeed.Value;
  174. // float cd = 1.0f / attackSpeed;
  175. // float attSpeed = (float)1;
  176. // if (cd < maxTime)
  177. // {
  178. // attSpeed = maxTime / cd;
  179. // }
  180. //
  181. // NormalAttSpeedScale = attSpeed;
  182. // // Debug.Log(NormalAttSpeedScale);
  183. // NormalAttCd = cd;
  184. }
  185. public virtual void Dispose()
  186. {
  187. _combatHeroEntity = null;
  188. currUseSkill = null;
  189. }
  190. public virtual void ProDormancyObj()
  191. {
  192. for (int i = 0; i < allSkill.size; i++)
  193. {
  194. SkillBasic skillBasic = allSkill[i];
  195. CObjectPool.Instance.Recycle(skillBasic);
  196. }
  197. allSkill.Clear();
  198. SkillCommands.Clear();
  199. }
  200. }
  201. }