SkillSlots.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Common.Utility.CombatEvent;
  2. using GameLogic.Combat.Skill;
  3. using GameLogic.Player;
  4. namespace GameLogic.Combat.Hero.Turntable
  5. {
  6. public class SkillSlots
  7. {
  8. public SkillBasic SkillBasic;
  9. public int index;
  10. public float angle;
  11. public int useCount;
  12. public int useTriggerType;
  13. private int triggerType = -1;
  14. /// <summary>
  15. /// 触发的次数
  16. /// </summary>
  17. public int triggerCount;
  18. // public int useCount;
  19. /// <summary>
  20. /// 金、水、木、火、土
  21. /// </summary>
  22. private int[] triggerAngle = new[] { 0, 72, 144, 216, 288 };
  23. private SkillTurntable skillTurntable;
  24. public void Init(int index, SkillTurntable skillTurntable)
  25. {
  26. this.index = index;
  27. angle = index * 36;
  28. this.skillTurntable = skillTurntable;
  29. }
  30. public void SetSkill(SkillBasic SkillBasic)
  31. {
  32. triggerCount = 0;
  33. this.SkillBasic = SkillBasic;
  34. if (SkillBasic != null)
  35. {
  36. SkillBasic.index = index;
  37. SkillBasic.AddToSkillSlots();
  38. }
  39. SkillSlotsAlterEventData skillSlotsAlterEventData = SkillSlotsAlterEventData.Create();
  40. skillSlotsAlterEventData.SkillSlots = this;
  41. skillSlotsAlterEventData.SkillBasic = SkillBasic;
  42. CombatEventManager.Instance.Dispatch(CombatEventType.SkillSlotsAlter, skillSlotsAlterEventData);
  43. }
  44. public void AddAngle(float addAngle)
  45. {
  46. int c = (int)(addAngle / 2);
  47. float d = addAngle % 2;
  48. for (int i = 0; i < c; i++)
  49. {
  50. Angle(2);
  51. }
  52. Angle(d);
  53. }
  54. private void Angle(float addAngle)
  55. {
  56. angle += addAngle;
  57. float v = angle % 360;
  58. for (int i = 0; i < triggerAngle.Length; i++)
  59. {
  60. if (triggerType == i)
  61. {
  62. continue;
  63. }
  64. float jd = v;
  65. int a = triggerAngle[i];
  66. int max = a + 2;
  67. int min = a - 2;
  68. if (min < 0)
  69. {
  70. jd -= 360;
  71. }
  72. if (jd <= max && jd >= min)
  73. {
  74. triggerType = i;
  75. Trigger(triggerType);
  76. break;
  77. }
  78. }
  79. }
  80. private void Trigger(int triggerType)
  81. {
  82. if (SkillBasic != null)
  83. {
  84. switch (SkillBasic.wuXingType)
  85. {
  86. case WuXingType.Gold:
  87. if (triggerType != 0)
  88. {
  89. return;
  90. }
  91. break;
  92. case WuXingType.Water:
  93. if (triggerType != 1)
  94. {
  95. return;
  96. }
  97. break;
  98. case WuXingType.Wood:
  99. if (triggerType != 2)
  100. {
  101. return;
  102. }
  103. break;
  104. case WuXingType.Fire:
  105. if (triggerType != 3)
  106. {
  107. return;
  108. }
  109. break;
  110. case WuXingType.Earth:
  111. if (triggerType != 4)
  112. {
  113. return;
  114. }
  115. break;
  116. }
  117. triggerCount++;
  118. if (triggerCount < SkillBasic.SelfSkillConfig.cd)
  119. {
  120. return;
  121. }
  122. triggerCount = 0;
  123. }
  124. useTriggerType = triggerType;
  125. skillTurntable.TriggerSlots(this, triggerType);
  126. }
  127. public void Replace()
  128. {
  129. if (SkillBasic != null)
  130. {
  131. SkillBasic.Replace();
  132. }
  133. SkillBasic = null;
  134. }
  135. public void ActiveSkill()
  136. {
  137. if (SkillBasic != null)
  138. {
  139. SkillBasic.ActiveSkill();
  140. }
  141. }
  142. }
  143. }