SkillSlots.cs 4.0 KB

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