SkillTurntable.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. using Common.Utility.CombatEvent;
  2. using Excel2Json;
  3. using Fort23.Core;
  4. using GameLogic.Combat.Skill;
  5. using GameLogic.Hero;
  6. using GameLogic.Player;
  7. using UnityEngine;
  8. namespace GameLogic.Combat.Hero.Turntable
  9. {
  10. public class SkillTurntable
  11. {
  12. public BetterList<SkillSlots> allSkillSlots = new BetterList<SkillSlots>();
  13. protected CombatHeroSkillControl combatHeroSkillControl;
  14. public CombatHeroEntity CombatHeroEntity
  15. {
  16. get { return _combatHeroEntity; }
  17. }
  18. protected CombatHeroEntity _combatHeroEntity;
  19. public BetterList<SkillBasic> _removeSkillBasic = new BetterList<SkillBasic>();
  20. private float _removeTime;
  21. private BetterList<SkillBasic> currUseFinishSkill = new BetterList<SkillBasic>();
  22. public float skillAddSkillCd;
  23. public int skillCount;
  24. public bool isStop;
  25. public void Init(int count, CombatHeroSkillControl combatHeroSkillControl, CombatHeroEntity combatHeroEntity)
  26. {
  27. this.combatHeroSkillControl = combatHeroSkillControl;
  28. _combatHeroEntity = combatHeroEntity;
  29. for (int i = 0; i < count; i++)
  30. {
  31. SkillSlots skillSlots = new SkillSlots();
  32. skillSlots.Init(i, this);
  33. allSkillSlots.Add(skillSlots);
  34. }
  35. }
  36. public SkillBasic GetSkillQueueForIndex(int index)
  37. {
  38. if (index < 0 || index >= allSkillSlots.Count)
  39. {
  40. return null;
  41. }
  42. return allSkillSlots[index].SkillBasic;
  43. }
  44. public void UseSkillFinish(SkillBasic skillBasic)
  45. {
  46. if (currUseFinishSkill.Contains(skillBasic))
  47. {
  48. return;
  49. }
  50. DS60103 ds60103 =
  51. _combatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().taoismSkillBasic as DS60103;
  52. if (ds60103 != null)
  53. {
  54. currUseFinishSkill.Add(skillBasic);
  55. }
  56. UseSkillFinishEventData useSkillFinishEventData = UseSkillFinishEventData.Create();
  57. useSkillFinishEventData.SkillBasic = skillBasic;
  58. CombatEventManager.Instance.Dispatch(CombatEventType.UseSkillFinish, useSkillFinishEventData);
  59. }
  60. public async CTask SetNewSkill(SkillInfo[] allSkill)
  61. {
  62. currUseFinishSkill.Clear();
  63. CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
  64. for (int i = 0; i < allSkillSlots.Count; i++)
  65. {
  66. SkillBasic skillBasic = allSkillSlots[i].SkillBasic;
  67. allSkillSlots[i].Replace();
  68. if (skillBasic != null)
  69. {
  70. _removeSkillBasic.Add(skillBasic);
  71. }
  72. }
  73. _removeTime = 0;
  74. skillAddSkillCd = 0;
  75. skillCount = 0;
  76. if (allSkill != null)
  77. {
  78. for (int i = 0; i < allSkill.Length; i++)
  79. {
  80. SkillInfo skillInfo = allSkill[i];
  81. if (skillInfo == null)
  82. {
  83. continue;
  84. }
  85. SkillConfig skillConfig = skillInfo.skillConfig;
  86. SkillBasic skillBasic = combatHeroSkillControl.AddSkill(skillInfo);
  87. if (skillBasic == null)
  88. {
  89. continue;
  90. }
  91. if (skillConfig.SkillType == 1)
  92. {
  93. skillCount++;
  94. }
  95. skillAddSkillCd += skillConfig.addcd;
  96. SetSkill(skillInfo.index, skillBasic);
  97. if (!string.IsNullOrEmpty(skillConfig.scriptName))
  98. {
  99. cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(
  100. skillConfig.timelineName + ".txt",
  101. delegate(AssetHandle handle)
  102. {
  103. if (handle != null)
  104. {
  105. TextAsset textAsset = handle.AssetObject<TextAsset>();
  106. TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);
  107. timeLienData.DeserializeData();
  108. handle.Release();
  109. _combatHeroEntity.combatHeroTimeLineControl.AddTimeLienData(timeLienData);
  110. }
  111. }));
  112. }
  113. }
  114. }
  115. await cTaskAwaitBuffer.WaitAll();
  116. for (int i = 0; i < allSkillSlots.Count; i++)
  117. {
  118. SkillSlots skillBasic = allSkillSlots[i];
  119. skillBasic.ActiveSkill();
  120. }
  121. CombatEventManager.Instance.Dispatch(CombatEventType.ExercisesAlter, null);
  122. }
  123. public void SetSkill(int index, SkillBasic skillBasic)
  124. {
  125. allSkillSlots[index].SetSkill(skillBasic);
  126. }
  127. public void TriggerSlots(SkillSlots skillSlots, int triggerType)
  128. {
  129. SkillBasic skillBasic = skillSlots.SkillBasic;
  130. if (skillBasic == null)
  131. {
  132. for (int i = 0; i < currUseFinishSkill.Count; i++)
  133. {
  134. SkillBasic dengDaiSkill = currUseFinishSkill[i];
  135. bool isOk = false;
  136. switch (dengDaiSkill.wuXingType)
  137. {
  138. case WuXingType.Gold:
  139. if (triggerType == 0)
  140. {
  141. isOk = true;
  142. }
  143. break;
  144. case WuXingType.Water:
  145. if (triggerType == 1)
  146. {
  147. isOk = true;
  148. }
  149. break;
  150. case WuXingType.Wood:
  151. if (triggerType == 2)
  152. {
  153. isOk = true;
  154. }
  155. break;
  156. case WuXingType.Fire:
  157. if (triggerType == 3)
  158. {
  159. isOk = true;
  160. }
  161. break;
  162. case WuXingType.Earth:
  163. if (triggerType == 4)
  164. {
  165. isOk = true;
  166. }
  167. break;
  168. }
  169. if (isOk)
  170. {
  171. skillSlots.SetSkill(dengDaiSkill);
  172. currUseFinishSkill.RemoveAt(i);
  173. FillInSkillSlotsEventData fillInSkillSlotsEventData = FillInSkillSlotsEventData.Create();
  174. fillInSkillSlotsEventData.SkillBasic = dengDaiSkill;
  175. fillInSkillSlotsEventData.SkillSlots = skillSlots;
  176. CombatEventManager.Instance.Dispatch(CombatEventType.FillInSkillSlots,
  177. fillInSkillSlotsEventData);
  178. return;
  179. }
  180. }
  181. return;
  182. }
  183. if (skillBasic.SelfSkillConfig.SkillType != 1)
  184. {
  185. return;
  186. }
  187. // if (skillBasic.wuXingType.HasFlag(WuXingType.Gold))
  188. // {
  189. // int odds = Random.Range(0, 100);
  190. // if (odds < 50)
  191. // {
  192. // _combatHeroEntity.CurrCombatHeroInfo.Water_Injury -= Random.Range(2, 5);
  193. // if (_combatHeroEntity.CurrCombatHeroInfo.Water_Injury < 0)
  194. // {
  195. // _combatHeroEntity.CurrCombatHeroInfo.Water_Injury = 0;
  196. // }
  197. // }
  198. // }
  199. //
  200. // if (skillBasic.wuXingType.HasFlag(WuXingType.Wood))
  201. // {
  202. // int odds = Random.Range(0, 100);
  203. // if (odds < 50)
  204. // {
  205. // _combatHeroEntity.CurrCombatHeroInfo.Fire_Injury -= Random.Range(2, 5);
  206. // if (_combatHeroEntity.CurrCombatHeroInfo.Fire_Injury < 0)
  207. // {
  208. // _combatHeroEntity.CurrCombatHeroInfo.Fire_Injury = 0;
  209. // }
  210. // }
  211. // }
  212. //
  213. // if (skillBasic.wuXingType.HasFlag(WuXingType.Water))
  214. // {
  215. // int odds = Random.Range(0, 100);
  216. // if (odds < 50)
  217. // {
  218. // _combatHeroEntity.CurrCombatHeroInfo.Wood_Injury -= Random.Range(2, 5);
  219. // if (_combatHeroEntity.CurrCombatHeroInfo.Wood_Injury < 0)
  220. // {
  221. // _combatHeroEntity.CurrCombatHeroInfo.Wood_Injury = 0;
  222. // }
  223. // }
  224. // }
  225. //
  226. // if (skillBasic.wuXingType.HasFlag(WuXingType.Fire))
  227. // {
  228. // int odds = Random.Range(0, 100);
  229. // if (odds < 50)
  230. // {
  231. // _combatHeroEntity.CurrCombatHeroInfo.Earth_Injury -= Random.Range(2, 5);
  232. // if (_combatHeroEntity.CurrCombatHeroInfo.Earth_Injury < 0)
  233. // {
  234. // _combatHeroEntity.CurrCombatHeroInfo.Earth_Injury = 0;
  235. // }
  236. // }
  237. // }
  238. //
  239. // if (skillBasic.wuXingType.HasFlag(WuXingType.Earth))
  240. // {
  241. // int odds = Random.Range(0, 100);
  242. // if (odds < 50)
  243. // {
  244. // _combatHeroEntity.CurrCombatHeroInfo.Metal_Injury -= Random.Range(2, 5);
  245. // if (_combatHeroEntity.CurrCombatHeroInfo.Metal_Injury < 0)
  246. // {
  247. // _combatHeroEntity.CurrCombatHeroInfo.Metal_Injury = 0;
  248. // }
  249. // }
  250. // }
  251. if (!_combatHeroEntity.IsCantAddGongFa())
  252. {
  253. return;
  254. }
  255. DS60103 ds60103 =
  256. _combatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().taoismSkillBasic as DS60103;
  257. if (ds60103 != null)
  258. {
  259. skillSlots.SetSkill(null);
  260. }
  261. skillSlots.useCount++;
  262. combatHeroSkillControl.AddCommandSkill(skillBasic);
  263. AddUseGongFaEventData addUseGongFaEventData = AddUseGongFaEventData.Create();
  264. addUseGongFaEventData.SkillBasic = skillBasic;
  265. addUseGongFaEventData.SkillSlots = skillSlots;
  266. CombatEventManager.Instance.Dispatch(CombatEventType.AddUseGongFa, addUseGongFaEventData);
  267. }
  268. public void Update(float t, float angle)
  269. {
  270. if (_removeSkillBasic.Count > 0)
  271. {
  272. _removeTime += t;
  273. if (_removeTime > 10)
  274. {
  275. for (int i = 0; i < _removeSkillBasic.Count; i++)
  276. {
  277. _removeSkillBasic[i].Dispose();
  278. }
  279. _removeSkillBasic.Clear();
  280. }
  281. }
  282. if (!isStop)
  283. {
  284. for (int i = 0; i < allSkillSlots.Count; i++)
  285. {
  286. SkillSlots skillSlots = allSkillSlots[i];
  287. skillSlots.AddAngle(angle);
  288. }
  289. }
  290. }
  291. }
  292. }