SkillSlots.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. using Common.Utility.CombatEvent;
  2. using GameLogic.Combat.Buff;
  3. using GameLogic.Combat.Skill;
  4. using GameLogic.Player;
  5. namespace GameLogic.Combat.Hero.Turntable
  6. {
  7. public class SkillSlots
  8. {
  9. public SkillBasic SkillBasic;
  10. public int index;
  11. public float angle;
  12. public int useCount;
  13. public int useTriggerType;
  14. private int triggerType = -1;
  15. /// <summary>
  16. /// 触发的次数
  17. /// </summary>
  18. public int triggerCount;
  19. // public int useCount;
  20. /// <summary>
  21. /// 金、水、木、火、土
  22. /// </summary>
  23. private int[] triggerAngle = new[] { 0, 72, 144, 216, 288 };
  24. private SkillTurntable skillTurntable;
  25. private int currTriggerTypeIndex;
  26. public void Init(int index, SkillTurntable skillTurntable)
  27. {
  28. this.index = index;
  29. angle = index * 36;
  30. this.skillTurntable = skillTurntable;
  31. }
  32. public void SetSkill(SkillBasic SkillBasic)
  33. {
  34. triggerCount = 0;
  35. this.SkillBasic = SkillBasic;
  36. if (SkillBasic != null)
  37. {
  38. SkillBasic.index = index;
  39. SkillBasic.AddToSkillSlots();
  40. }
  41. if (SkillBasic != null)
  42. {
  43. switch (SkillBasic.wuXingType)
  44. {
  45. case WuXingType.Gold:
  46. currTriggerTypeIndex = 0;
  47. break;
  48. case WuXingType.Water:
  49. currTriggerTypeIndex = 1;
  50. break;
  51. case WuXingType.Wood:
  52. currTriggerTypeIndex = 2;
  53. break;
  54. case WuXingType.Fire:
  55. currTriggerTypeIndex = 3;
  56. break;
  57. case WuXingType.Earth:
  58. currTriggerTypeIndex = 4;
  59. break;
  60. }
  61. }
  62. SkillSlotsAlterEventData skillSlotsAlterEventData = SkillSlotsAlterEventData.Create();
  63. skillSlotsAlterEventData.SkillSlots = this;
  64. skillSlotsAlterEventData.SkillBasic = SkillBasic;
  65. CombatEventManager.Instance.Dispatch(CombatEventType.SkillSlotsAlter, skillSlotsAlterEventData);
  66. }
  67. public void AddAngle(float addAngle)
  68. {
  69. int c = (int)(addAngle / 2);
  70. float d = addAngle % 2;
  71. for (int i = 0; i < c; i++)
  72. {
  73. Angle(2);
  74. }
  75. Angle(d);
  76. }
  77. public float GetFinishBl()
  78. {
  79. if (!SkillBasic.isActive)
  80. {
  81. return 0;
  82. }
  83. float v = angle % 360;
  84. int targetAngle = triggerAngle[currTriggerTypeIndex];
  85. float jd = v;
  86. if (targetAngle == 0)
  87. {
  88. targetAngle = 360;
  89. }
  90. float finishAngle = 0;
  91. if (jd < targetAngle)
  92. {
  93. finishAngle = 360 - (targetAngle - jd);
  94. }
  95. else
  96. {
  97. finishAngle = (jd - targetAngle);
  98. }
  99. float allT = SkillBasic.SelfSkillConfig.cd * 360;
  100. return (finishAngle + triggerCount * 360) / allT;
  101. }
  102. public float GetFinishAngle()
  103. {
  104. if (SkillBasic == null || !SkillBasic.isActive)
  105. {
  106. return int.MaxValue;
  107. }
  108. float v = angle % 360;
  109. int targetAngle = triggerAngle[currTriggerTypeIndex];
  110. float jd = v;
  111. if (targetAngle == 0)
  112. {
  113. targetAngle = 360;
  114. }
  115. float finishAngle = 0;
  116. if (jd < targetAngle)
  117. {
  118. finishAngle = 360 - (targetAngle - jd);
  119. }
  120. else
  121. {
  122. finishAngle = (jd - targetAngle);
  123. }
  124. float allT = SkillBasic.SelfSkillConfig.cd * 360;
  125. return allT - (finishAngle + triggerCount * 360);
  126. }
  127. private void Angle(float addAngle)
  128. {
  129. angle += addAngle;
  130. float v = angle % 360;
  131. for (int i = 0; i < triggerAngle.Length; i++)
  132. {
  133. if (triggerType == i)
  134. {
  135. continue;
  136. }
  137. float jd = v;
  138. int a = triggerAngle[i];
  139. int max = a + 2;
  140. int min = a - 2;
  141. if (min < 0)
  142. {
  143. jd -= 360;
  144. }
  145. if (jd <= max && jd >= min)
  146. {
  147. triggerType = i;
  148. Trigger(triggerType);
  149. break;
  150. }
  151. }
  152. }
  153. private void Trigger(int triggerType)
  154. {
  155. switch (triggerType)
  156. {
  157. case 0:
  158. b_1019 b1019 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1019>();
  159. if (b1019 != null)
  160. {
  161. return;
  162. }
  163. break;
  164. case 1:
  165. b_1021 b_1021 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1021>();
  166. if (b_1021 != null)
  167. {
  168. return;
  169. }
  170. break;
  171. case 2:
  172. b_1020 b1020 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1020>();
  173. if (b1020 != null)
  174. {
  175. return;
  176. }
  177. break;
  178. case 3:
  179. b_1022 b_1022 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1022>();
  180. if (b_1022 != null)
  181. {
  182. return;
  183. }
  184. break;
  185. case 4:
  186. b_1023 b_1023 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1023>();
  187. if (b_1023 != null)
  188. {
  189. return;
  190. }
  191. break;
  192. }
  193. if (SkillBasic != null && SkillBasic.isActive)
  194. {
  195. TriggerSkillSlotsEventData triggerSkillSlotsEventData = TriggerSkillSlotsEventData.Create();
  196. triggerSkillSlotsEventData.SkillBasic = SkillBasic;
  197. triggerSkillSlotsEventData.SkillSlots = this;
  198. triggerSkillSlotsEventData.triggerType = triggerType;
  199. CombatEventManager.Instance.Dispatch(CombatEventType.TriggerSkillSlots, triggerSkillSlotsEventData);
  200. switch (SkillBasic.wuXingType)
  201. {
  202. case WuXingType.Gold:
  203. if (triggerType != 0)
  204. {
  205. return;
  206. }
  207. break;
  208. case WuXingType.Water:
  209. if (triggerType != 1)
  210. {
  211. return;
  212. }
  213. break;
  214. case WuXingType.Wood:
  215. if (triggerType != 2)
  216. {
  217. return;
  218. }
  219. break;
  220. case WuXingType.Fire:
  221. if (triggerType != 3)
  222. {
  223. return;
  224. }
  225. break;
  226. case WuXingType.Earth:
  227. if (triggerType != 4)
  228. {
  229. return;
  230. }
  231. break;
  232. }
  233. triggerCount++;
  234. if (triggerCount < SkillBasic.SelfSkillConfig.cd)
  235. {
  236. return;
  237. }
  238. triggerCount = 0;
  239. }
  240. useTriggerType = triggerType;
  241. skillTurntable.TriggerSlots(this, triggerType);
  242. }
  243. public void Replace()
  244. {
  245. if (SkillBasic != null)
  246. {
  247. SkillBasic.Replace();
  248. }
  249. SkillBasic = null;
  250. }
  251. public void ActiveSkill()
  252. {
  253. if (SkillBasic != null)
  254. {
  255. SkillBasic.ActiveSkill();
  256. }
  257. }
  258. }
  259. }