CombatHeroSkillControl.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  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. public int useSkillCount
  20. {
  21. get { return SkillCommands.size; }
  22. }
  23. /// <summary>
  24. /// 当前能使用的技能
  25. /// </summary>
  26. public SkillBasic currUseSkill;
  27. // public float NormalAttSpeedScale;
  28. public BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();
  29. public float skillQueueTime = 5f;
  30. // private BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();
  31. private int _currUseQueueIndex = 0;
  32. public float allMagic = 500;
  33. protected float addMaicSpeed = 5000;
  34. public float addChongNeng;
  35. public bool isKuoLiQuanKai;
  36. protected float qiankaiTime;
  37. protected override async CTask ProInit()
  38. {
  39. // NormalAttSpeedScale = 2;
  40. CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
  41. List<int> skillId = _combatHeroEntity.CurrCombatHeroInfo.unLockSkills;
  42. if (skillId != null)
  43. {
  44. for (int i = 0; i < skillId.Count; i++)
  45. {
  46. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillId[i]);
  47. SkillBasic skillBasic = AddSkill(skillConfig);
  48. if (skillBasic == null)
  49. {
  50. continue;
  51. }
  52. _skillQueue.Add(skillBasic);
  53. if (!string.IsNullOrEmpty(skillConfig.scriptName))
  54. {
  55. cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(
  56. skillConfig.timelineName + ".txt",
  57. delegate(AssetHandle handle)
  58. {
  59. if (handle != null)
  60. {
  61. TextAsset textAsset = handle.AssetObject<TextAsset>();
  62. TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);
  63. timeLienData.DeserializeData();
  64. handle.Release();
  65. _combatHeroEntity.combatHeroTimeLineControl.AddTimeLienData(timeLienData);
  66. }
  67. }));
  68. }
  69. }
  70. }
  71. await cTaskAwaitBuffer.WaitAll();
  72. for (int i = 0; i < _skillQueue.Count; i++)
  73. {
  74. _skillQueue[i].angle -= i * 25;
  75. }
  76. CombatEventManager.Instance.Dispatch(CombatEventType.ExercisesAlter, null);
  77. }
  78. public void UpdateSkill(List<int> skillIDs)
  79. {
  80. for (int i = 0; i < skillIDs.Count; i++)
  81. {
  82. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillIDs[i]);
  83. // SkillConfig skillConfig = skillIDs[i];
  84. SkillBasic skillBasic = GetSkillBasic(skillConfig.IDGroup);
  85. if (skillBasic == null)
  86. {
  87. AddSkill(skillConfig);
  88. }
  89. else
  90. {
  91. skillBasic.InitSkillConfig(skillConfig);
  92. skillBasic.InitSkill(_combatHeroEntity);
  93. }
  94. }
  95. }
  96. public void AddCommandSkill(SkillBasic skill)
  97. {
  98. SkillCommands.Add(skill);
  99. }
  100. public void RemoveCommandSkill(SkillBasic skill)
  101. {
  102. SkillCommands.Remove(skill);
  103. }
  104. public void ClearCommandSkill()
  105. {
  106. SkillCommands.Clear();
  107. }
  108. public void UseSkill(SkillBasic skill)
  109. {
  110. CombatUseSkillEventData combatUseSkillEventData = CombatUseSkillEventData.Create();
  111. combatUseSkillEventData.useSkill = skill;
  112. CombatEventManager.Instance.Dispatch(CombatEventType.UseSkill, combatUseSkillEventData);
  113. currUseSkill = skill;
  114. skill.UseSkill();
  115. if (skill.SelfSkillConfig.SkillType == 1)
  116. {
  117. SetNormalAttCd();
  118. }
  119. }
  120. /// <summary>
  121. /// 判断是否有技能可释放
  122. /// </summary>
  123. /// <returns></returns>
  124. public SkillBasic CanReleaseSkill()
  125. {
  126. // if (_combatHeroEntity.IsControl())
  127. // {
  128. // return null;
  129. // }
  130. if (!_combatHeroEntity.IsEnemy && _combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
  131. {
  132. return null;
  133. }
  134. SkillBasic skillBasic = null;
  135. for (int i = 0; i < SkillCommands.size; i++)
  136. {
  137. skillBasic = SkillCommands[i];
  138. break;
  139. }
  140. return skillBasic;
  141. }
  142. public void StartPolling()
  143. {
  144. for (int i = 0; i < _skillQueue.size; i++)
  145. {
  146. SkillBasic skillBasic = allSkill[i];
  147. skillBasic.PollingInitBefore(_skillQueue);
  148. }
  149. for (int i = 0; i < _skillQueue.size; i++)
  150. {
  151. SkillBasic skillBasic = allSkill[i];
  152. skillBasic.PollingInit(_skillQueue);
  153. }
  154. _currUseQueueIndex = 0;
  155. }
  156. protected override void ProUpdate(float t)
  157. {
  158. if (CombatController.currActiveCombat.IsFightState)
  159. {
  160. float speed = _combatHeroEntity.CurrCombatHeroInfo.attSpeed.Value * (isKuoLiQuanKai ? 3 : 1f);
  161. for (int i = 0; i < _skillQueue.Count; i++)
  162. {
  163. SkillBasic skillBasic = _skillQueue[i];
  164. skillBasic.angle += 1 * speed;
  165. float jd = skillBasic.angle % 360;
  166. if (jd > skillBasic.useAngle && skillBasic.angle > skillBasic.lasetAngle)
  167. {
  168. skillBasic.lasetAngle += 360;
  169. if (allMagic > 30)
  170. {
  171. allMagic -= 30;
  172. skillBasic.useCount++;
  173. if (!isKuoLiQuanKai)
  174. {
  175. addChongNeng += 10;
  176. if (addChongNeng >= 150)
  177. {
  178. isKuoLiQuanKai = true;
  179. }
  180. }
  181. AddCommandSkill(skillBasic);
  182. // Debug.Log("旋转一圈");
  183. }
  184. }
  185. }
  186. }
  187. if (isKuoLiQuanKai)
  188. {
  189. qiankaiTime += t;
  190. if (qiankaiTime > 3)
  191. {
  192. isKuoLiQuanKai = false;
  193. qiankaiTime = 0;
  194. addChongNeng = 0;
  195. }
  196. }
  197. allMagic += t * addMaicSpeed;
  198. if (allMagic > 500)
  199. {
  200. allMagic = 500;
  201. }
  202. // if (currUseSkill == null && SkillCommands.Count <= 0)
  203. // {
  204. // while (_currUseQueueIndex < _skillQueue.Count && SkillCommands.Count <= 0)
  205. // {
  206. // SkillBasic skillBasic = _skillQueue[_currUseQueueIndex];
  207. // if (skillBasic.SelfSkillConfig.SkillType == 1)
  208. // {
  209. // if (skillBasic.IsCanUse())
  210. // {
  211. // AddCommandSkill(skillBasic);
  212. // }
  213. // }
  214. //
  215. // _currUseQueueIndex++;
  216. // }
  217. // }
  218. // if (_currUseQueueIndex >= _skillQueue.Count)
  219. // {
  220. // StartPolling();
  221. // }
  222. }
  223. public void SetNormalAttCd()
  224. {
  225. // if (NormalAttack == null)
  226. // {
  227. // return;
  228. // }
  229. //
  230. // string timeLineName = "attack";
  231. // float maxTime = _combatHeroEntity.combatHeroTimeLineControl.TimeLineData.GetTimeLineEventLogicGroupForTime(
  232. // timeLineName, null);
  233. // float attackSpeed = _combatHeroEntity.CurrCombatHeroInfo.attSpeed.Value;
  234. // float cd = 1.0f / attackSpeed;
  235. // float attSpeed = (float)1;
  236. // if (cd < maxTime)
  237. // {
  238. // attSpeed = maxTime / cd;
  239. // }
  240. //
  241. // NormalAttSpeedScale = attSpeed;
  242. // // Debug.Log(NormalAttSpeedScale);
  243. // NormalAttCd = cd;
  244. }
  245. public virtual void Dispose()
  246. {
  247. _combatHeroEntity = null;
  248. currUseSkill = null;
  249. }
  250. public virtual void ProDormancyObj()
  251. {
  252. for (int i = 0; i < allSkill.size; i++)
  253. {
  254. SkillBasic skillBasic = allSkill[i];
  255. CObjectPool.Instance.Recycle(skillBasic);
  256. }
  257. allSkill.Clear();
  258. SkillCommands.Clear();
  259. }
  260. }
  261. }