CombatHeroSkillControl.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using System;
  2. using Excel2Json;
  3. using Fort23.UTool;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Skill;
  6. using UnityEngine;
  7. namespace GameLogic.Combat.Hero
  8. {
  9. public class CombatHeroSkillControl : IDisposable
  10. {
  11. private BetterList<SkillBasic> allSkill = new BetterList<SkillBasic>();
  12. /// <summary>
  13. /// 技能指令,0表示没有技能;
  14. /// </summary>
  15. private BetterList<SkillBasic> SkillCommands = new BetterList<SkillBasic>();
  16. /// <summary>
  17. /// 当前能使用的技能
  18. /// </summary>
  19. public SkillBasic currUseSkill;
  20. private CombatHeroEntity _combatHeroEntity;
  21. /// <summary>
  22. /// 普攻
  23. /// </summary>
  24. public SkillBasic NormalAttack;
  25. public float NormalAttCd;
  26. public float NormalAttSpeedScale;
  27. public void Init(CombatHeroEntity combatHeroEntity)
  28. {
  29. _combatHeroEntity = combatHeroEntity;
  30. int[] skillId = _combatHeroEntity.CurrCombatHeroInfo.skillId;
  31. if (skillId != null)
  32. {
  33. for (int i = 0; i < skillId.Length; i++)
  34. {
  35. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillId[i]);
  36. AddSkill(skillConfig);
  37. }
  38. }
  39. }
  40. public void AddSkill(SkillConfig skillConfig)
  41. {
  42. SkillBasic skillBasic = SkillScriptManager.Instance.CreateSkillBasic(skillConfig);
  43. allSkill.Add(skillBasic);
  44. skillBasic.InitSkill(_combatHeroEntity);
  45. if (skillConfig.SkillType == 1)
  46. {
  47. NormalAttack = skillBasic;
  48. NormalAttack.ActiveTimeLineGroupName = "attack";
  49. SetNormalAttCd();
  50. }
  51. }
  52. public void AddCommandSkill(SkillBasic skill)
  53. {
  54. SkillCommands.Add(skill);
  55. }
  56. public void RemoveCommandSkill(SkillBasic skill)
  57. {
  58. SkillCommands.Remove(skill);
  59. }
  60. public void ClearCommandSkill()
  61. {
  62. SkillCommands.Clear();
  63. }
  64. public void UseSkill(SkillBasic skill)
  65. {
  66. currUseSkill = skill;
  67. skill.UseSkill();
  68. if (skill.SelfSkillConfig.SkillType == 1)
  69. {
  70. SetNormalAttCd();
  71. }
  72. }
  73. /// <summary>
  74. /// 判断是否有技能可释放
  75. /// </summary>
  76. /// <returns></returns>
  77. public SkillBasic CanReleaseSkill()
  78. {
  79. // if (_combatHeroEntity.IsControl())
  80. // {
  81. // return null;
  82. // }
  83. SkillBasic skillBasic = null;
  84. for (int i = 0; i < SkillCommands.size; i++)
  85. {
  86. skillBasic = SkillCommands[i];
  87. }
  88. return skillBasic;
  89. }
  90. public void Update(float t)
  91. {
  92. for (int i = 0; i < allSkill.size; i++)
  93. {
  94. SkillBasic skillBasic = allSkill[i];
  95. skillBasic.CombatUpdate(i);
  96. skillBasic.ReduceCd(t);
  97. }
  98. NormalAttCd -= t;
  99. if (NormalAttCd <= 0 && !SkillCommands.Contains(NormalAttack))
  100. {
  101. AddCommandSkill(NormalAttack);
  102. }
  103. }
  104. public void SetNormalAttCd()
  105. {
  106. if (NormalAttack == null)
  107. {
  108. return;
  109. }
  110. string timeLineName = "attack";
  111. float maxTime = _combatHeroEntity.combatHeroTimeLineControl.TimeLineData.GetTimeLineEventLogicGroupForTime(
  112. timeLineName, null);
  113. float attackSpeed = _combatHeroEntity.CurrCombatHeroInfo.attSpeed.Value;
  114. float cd = 1.0f / attackSpeed;
  115. float attSpeed = (float)1;
  116. if (cd < maxTime)
  117. {
  118. attSpeed = maxTime / cd;
  119. }
  120. NormalAttSpeedScale = attSpeed;
  121. Debug.Log(NormalAttSpeedScale);
  122. NormalAttCd = cd;
  123. }
  124. public void Dispose()
  125. {
  126. for (int i = 0; i < allSkill.size; i++)
  127. {
  128. SkillBasic skillBasic = allSkill[i];
  129. skillBasic.Dispose();
  130. }
  131. allSkill.Clear();
  132. SkillCommands.Clear();
  133. _combatHeroEntity = null;
  134. NormalAttack = null;
  135. currUseSkill = null;
  136. }
  137. }
  138. }