CombatHeroSkillControl.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System.Collections.Generic;
  2. using Common.Utility.CombatEvent;
  3. using Excel2Json;
  4. using Fort23.Core;
  5. using Fort23.Mono;
  6. using Fort23.UTool;
  7. using GameLogic.Combat.CombatTool;
  8. using GameLogic.Combat.Hero.Turntable;
  9. using GameLogic.Combat.Skill;
  10. using GameLogic.Hero;
  11. using GameLogic.Player;
  12. using UnityEngine;
  13. namespace GameLogic.Combat.Hero
  14. {
  15. public class CombatHeroSkillControl : CombatHeroSkillControlBasic
  16. {
  17. /// <summary>
  18. /// 技能指令,0表示没有技能;
  19. /// </summary>
  20. private BetterList<SkillBasic> SkillCommands = new BetterList<SkillBasic>();
  21. public int useSkillCount
  22. {
  23. get { return SkillCommands.size; }
  24. }
  25. /// <summary>
  26. /// 当前能使用的技能
  27. /// </summary>
  28. public SkillBasic currUseSkill;
  29. // public float NormalAttSpeedScale;
  30. // public BetterList<SkillSlots>
  31. // public BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();
  32. // public BetterList<SkillBasic> _removeSkillBasic = new BetterList<SkillBasic>();
  33. // private float _removeTime;
  34. public SkillTurntable SkillTurntable;
  35. protected override async CTask ProInit()
  36. {
  37. SkillTurntable = new SkillTurntable();
  38. SkillTurntable.Init(10, this, _combatHeroEntity);
  39. if (_combatHeroEntity.IsEnemy)
  40. {
  41. await SetNewSkill(_combatHeroEntity.CurrCombatHeroInfo.unLockSkills.ToArray());
  42. }
  43. else
  44. {
  45. await SetNewSkill(PlayerManager.Instance.GongFaControl.allUseSkill);
  46. }
  47. }
  48. public override async CTask SetNewSkill(SkillInfo[] allSkill)
  49. {
  50. await SkillTurntable.SetNewSkill(allSkill);
  51. }
  52. public SkillBasic GetSkillQueueForIndex(int index)
  53. {
  54. return SkillTurntable.GetSkillQueueForIndex(index);
  55. }
  56. public void AddCommandSkill(SkillBasic skill)
  57. {
  58. SkillCommands.Add(skill);
  59. }
  60. public void RemoveCommandSkill(SkillBasic skill)
  61. {
  62. SkillCommands.Remove(skill);
  63. }
  64. public void ClearCommandSkill()
  65. {
  66. SkillCommands.Clear();
  67. }
  68. public void UseSkillFinish(SkillBasic skill)
  69. {
  70. if (skill == null)
  71. {
  72. return;
  73. }
  74. SkillTurntable.UseSkillFinish(skill);
  75. }
  76. public void UseSkill(SkillBasic skill)
  77. {
  78. CombatUseSkillEventData combatUseSkillEventData = CombatUseSkillEventData.Create();
  79. combatUseSkillEventData.useSkill = skill;
  80. CombatEventManager.Instance.Dispatch(CombatEventType.UseSkill, combatUseSkillEventData);
  81. currUseSkill = skill;
  82. skill.UseSkill();
  83. }
  84. /// <summary>
  85. /// 判断是否有技能可释放
  86. /// </summary>
  87. /// <returns></returns>
  88. public SkillBasic CanReleaseSkill()
  89. {
  90. // if (_combatHeroEntity.IsControl())
  91. // {
  92. // return null;
  93. // }
  94. if (!_combatHeroEntity.IsEnemy && _combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
  95. {
  96. return null;
  97. }
  98. SkillBasic skillBasic = null;
  99. for (int i = 0; i < SkillCommands.size; i++)
  100. {
  101. skillBasic = SkillCommands[i];
  102. break;
  103. }
  104. return skillBasic;
  105. }
  106. protected override void ProUpdate(float t)
  107. {
  108. if (CombatController.currActiveCombat.IsFightState)
  109. {
  110. float speed = _combatHeroEntity.CurrCombatHeroInfo.GetAttSpeed;
  111. SkillTurntable.Update(t, 1 * speed);
  112. }
  113. }
  114. public virtual void Dispose()
  115. {
  116. _combatHeroEntity = null;
  117. currUseSkill = null;
  118. }
  119. public virtual void ProDormancyObj()
  120. {
  121. for (int i = 0; i < allSkill.size; i++)
  122. {
  123. SkillBasic skillBasic = allSkill[i];
  124. CObjectPool.Instance.Recycle(skillBasic);
  125. }
  126. allSkill.Clear();
  127. SkillCommands.Clear();
  128. }
  129. }
  130. }