SkillSelectPanel.cs 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Core.Audio;
  5. using Core.Event.Event;
  6. using Core.Language;
  7. using Excel2Json;
  8. using Fort23.Core;
  9. using Fort23.UTool;
  10. using GameLogic.Combat;
  11. using GameLogic.Combat.CombatTool;
  12. using GameLogic.Hero;
  13. using UnityEngine;
  14. using UnityEngine.EventSystems;
  15. using UnityEngine.UI;
  16. namespace Fort23.Mono
  17. {
  18. [UIBinding(prefab = "SkillSelectPanel")]
  19. public partial class SkillSelectPanel : UIPanel, IScrollListContent
  20. {
  21. private bool _isSelectSkill;
  22. public List<SkillKongWidget> allKongSkill = new List<SkillKongWidget>();
  23. List<WuXingGongFaWidget> _wuXingGongFaWidgets = new List<WuXingGongFaWidget>();
  24. private SkillInfo selectSkillConfig;
  25. private bool isAlter;
  26. private int type1 = 0;
  27. private int type2 = 0;
  28. public SkillInfo[] allUseSkill;
  29. private int currenRoadSkilId;
  30. /// <summary>
  31. /// 1.执行升级逻辑 2.执行更换逻辑
  32. /// </summary>
  33. private int infoType = 1;
  34. SkillInfo currentSelectedSkill;
  35. public static async CTask<SkillSelectPanel> OpenSkillSelectPanel()
  36. {
  37. CombatDrive.Instance.CombatController.isUpdate = false;
  38. SkillSelectPanel skillSelectPanel =
  39. await UIManager.Instance.LoadAndOpenPanel<SkillSelectPanel>(null, UILayer.Middle);
  40. return skillSelectPanel;
  41. }
  42. public async override CTask GetFocus()
  43. {
  44. if (infoType == 1)
  45. {
  46. await AppBarPanel.OpenPanel(this);
  47. }
  48. else if (infoType == 2)
  49. {
  50. AppBarPanel.ClosePanel();
  51. }
  52. TitlePanel.ClosePanel();
  53. // AppBarPanel.OpenPanel(this);
  54. await base.GetFocus();
  55. }
  56. public override CTask LoseFocus()
  57. {
  58. // AppBarPanel.ClosePanel();
  59. return base.LoseFocus();
  60. }
  61. private void Init()
  62. {
  63. isAddStack = true;
  64. IsShowAppBar = true;
  65. }
  66. protected override void AddEvent()
  67. {
  68. // EventManager.Instance.AddEventListener(CustomEventType.SkillBeginDrag, SkillBeginDragHandle);
  69. // EventManager.Instance.AddEventListener(CustomEventType.SkillDrag, SkillDragHandle);
  70. // EventManager.Instance.AddEventListener(CustomEventType.SkillEndDrag, SkillEndDragHandle);
  71. }
  72. protected override void DelEvent()
  73. {
  74. // EventManager.Instance.RemoveEventListener(CustomEventType.SkillBeginDrag, SkillBeginDragHandle);
  75. // EventManager.Instance.RemoveEventListener(CustomEventType.SkillDrag, SkillDragHandle);
  76. // EventManager.Instance.RemoveEventListener(CustomEventType.SkillEndDrag, SkillEndDragHandle);
  77. }
  78. public override CTask<bool> AsyncInit(object[] uiData)
  79. {
  80. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 1))
  81. {
  82. PlayerGuideManager.Instance.NextGuide();
  83. }
  84. allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray();
  85. currenRoadSkilId = PlayerManager.Instance.myHero.TaoismSkillId;
  86. UpdateSkillWidget();
  87. UpdateRoad();
  88. // CloseSelect();
  89. return base.AsyncInit(uiData);
  90. }
  91. public override void AddButtonEvent()
  92. {
  93. Btn_OneKyChange.onClick.AddListener(() =>
  94. {
  95. for (var i = 0; i < allUseSkill.Length; i++)
  96. {
  97. allUseSkill[i] = null;
  98. }
  99. SkillInfo[] skills = new SkillInfo[5];
  100. List<SkillInfo> allSkill = PlayerManager.Instance.GongFaControl.allSkill.ToList();
  101. for (var i = 0; i < allSkill.Count; i++)
  102. {
  103. //金
  104. if (allSkill[i].skillConfig.attribute == 1)
  105. {
  106. if (skills[0] == null || skills[0].skillConfig.level > allSkill[i].skillConfig.level)
  107. {
  108. skills[0] = allSkill[i];
  109. }
  110. }
  111. //木
  112. if (allSkill[i].skillConfig.attribute == 2)
  113. {
  114. if (skills[1] == null || skills[1].skillConfig.level > allSkill[i].skillConfig.level)
  115. {
  116. skills[1] = allSkill[i];
  117. }
  118. }
  119. //水
  120. if (allSkill[i].skillConfig.attribute == 4)
  121. {
  122. if (skills[2] == null || skills[2].skillConfig.level > allSkill[i].skillConfig.level)
  123. {
  124. skills[2] = allSkill[i];
  125. }
  126. }
  127. //火
  128. if (allSkill[i].skillConfig.attribute == 8)
  129. {
  130. if (skills[3] == null || skills[3].skillConfig.level > allSkill[i].skillConfig.level)
  131. {
  132. skills[3] = allSkill[i];
  133. }
  134. }
  135. //土
  136. if (allSkill[i].skillConfig.attribute == 16)
  137. {
  138. if (skills[4] == null || skills[4].skillConfig.level > allSkill[i].skillConfig.level)
  139. {
  140. skills[4] = allSkill[i];
  141. }
  142. }
  143. }
  144. for (var i = 0; i < allKongSkill.Count; i++)
  145. {
  146. allKongSkill[i].InitWidget(allKongSkill[i].index, this);
  147. }
  148. for (var i = 0; i < indexList.Count; i++)
  149. {
  150. if (skills[i] == null)
  151. continue;
  152. if (!IsMainGongFaChange(skills[i].skillConfig))
  153. continue;
  154. if (!IsPassiveGongFaChange(skills[i].skillConfig))
  155. continue;
  156. allKongSkill[indexList[i][0]].SetSKill(skills[i]);
  157. allUseSkill[indexList[i][0]] = skills[i];
  158. }
  159. isAlter = true;
  160. UpdateSkillWidget();
  161. BaoChun();
  162. });
  163. Btn_ChangeOk.onClick.AddListener(() =>
  164. {
  165. ChangeInfoType(1);
  166. if (isAlter)
  167. {
  168. PlayerManager.Instance.GongFaControl.SaveUseSkill(allUseSkill);
  169. PlayerManager.Instance.GongFaControl.SetTaoismSkillIndex(currenRoadSkilId);
  170. PlayerManager.Instance.myHero.heroData.TaoismSkillId = currenRoadSkilId;
  171. AccountFileInfo.Instance.SavePlayerData();
  172. }
  173. isAlter = false;
  174. });
  175. Btn_Info.onClick.AddListener(async () =>
  176. {
  177. if (currentSelectedSkill != null)
  178. {
  179. GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(currentSelectedSkill);
  180. await gongFaUpgradePanel.UIClosed();
  181. Sort(type1, type2);
  182. }
  183. });
  184. Btn_ChangeRoad.onClick.AddListener(() =>
  185. {
  186. SkillRoadSelecPanel.OpenPanel(currenRoadSkilId, (skillId) =>
  187. {
  188. if (skillId != currenRoadSkilId && skillId != 0)
  189. {
  190. currenRoadSkilId = skillId;
  191. isAlter = true;
  192. UpdateRoad();
  193. }
  194. });
  195. });
  196. Btn_Setting.onClick.AddListener(() =>
  197. {
  198. ChangeInfoType(2);
  199. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 4))
  200. {
  201. PlayerGuideManager.Instance.NextGuide();
  202. }
  203. });
  204. Btn_Jin.onClick.AddListener(() =>
  205. {
  206. if (type2 == 1)
  207. {
  208. type2 = 0;
  209. }
  210. else
  211. {
  212. type2 = 1;
  213. }
  214. Sort(type1, type2);
  215. });
  216. Btn_Mu.onClick.AddListener(() =>
  217. {
  218. if (type2 == 2)
  219. {
  220. type2 = 0;
  221. }
  222. else
  223. {
  224. type2 = 2;
  225. }
  226. Sort(type1, type2);
  227. });
  228. Btn_Shui.onClick.AddListener(() =>
  229. {
  230. if (type2 == 4)
  231. {
  232. type2 = 0;
  233. }
  234. else
  235. {
  236. type2 = 4;
  237. }
  238. Sort(type1, type2);
  239. });
  240. Btn_Huo.onClick.AddListener(() =>
  241. {
  242. if (type2 == 8)
  243. {
  244. type2 = 0;
  245. }
  246. else
  247. {
  248. type2 = 8;
  249. }
  250. Sort(type1, type2);
  251. });
  252. Btn_Tu.onClick.AddListener(() =>
  253. {
  254. if (type2 == 16)
  255. {
  256. type2 = 0;
  257. }
  258. else
  259. {
  260. type2 = 16;
  261. }
  262. Sort(type1, type2);
  263. });
  264. Btn_All.onClick.AddListener(() =>
  265. {
  266. type1 = 0;
  267. Sort(type1, type2);
  268. });
  269. Btn_ZhuDong.onClick.AddListener(() =>
  270. {
  271. type1 = 1;
  272. Sort(type1, type2);
  273. });
  274. Btn_FuZu.onClick.AddListener(() =>
  275. {
  276. type1 = 2;
  277. Sort(type1, type2);
  278. });
  279. Btn_BeiDong.onClick.AddListener(() =>
  280. {
  281. type1 = 5;
  282. Sort(type1, type2);
  283. });
  284. guanbi.onClick.AddListener(() =>
  285. {
  286. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 8))
  287. {
  288. PlayerGuideManager.Instance.NextGuide();
  289. }
  290. if (infoType == 2)
  291. {
  292. ChangeInfoType(1);
  293. currenRoadSkilId = PlayerManager.Instance.myHero.TaoismSkillId;
  294. allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray();
  295. for (var i = 0; i < allKongSkill.Count; i++)
  296. {
  297. allKongSkill[i].InitWidget(allKongSkill[i].index, this);
  298. allKongSkill[i].SetSKill(allUseSkill[allKongSkill[i].index]);
  299. }
  300. UpdateSkillWidget();
  301. UpdateRoad();
  302. }
  303. else
  304. {
  305. // UIManager.Instance.HideUIUIPanel(this);
  306. }
  307. AudioManager.Instance.PlayAudio("ui_fanhui.wav");
  308. });
  309. Btn_RemoveGongFa.onClick.AddListener(() =>
  310. {
  311. // PlayerManager.Instance.GongFaControl.RemoveSkillInfo(dianjiSkillKongWidget.index);
  312. allUseSkill[dianjiSkillKongWidget.index] = null;
  313. dianjiSkillKongWidget.Cleared();
  314. isAlter = true;
  315. UpdateSkillWidget();
  316. CloseSelect();
  317. BaoChun();
  318. showSkillInfo.Sort(Sort);
  319. Content.Init(this, showSkillInfo.Count);
  320. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  321. });
  322. Sv.onValueChanged.AddListener((s) =>
  323. {
  324. if (currentSelectedSkill == null)
  325. {
  326. return;
  327. }
  328. Btn_Info.transform.SetAsLastSibling();
  329. });
  330. }
  331. private bool isDraging = false;
  332. //拖动得技能
  333. private SkillKongWidget nowSkillKongWidget;
  334. //进入的技能
  335. private SkillKongWidget nowInSkillKongWidget;
  336. //拖动中技能
  337. private SkillKongWidget nowSkillKongWidget1;
  338. // private Image _image;
  339. private async void SkillBeginDragHandle(PointerEventData pointerEventData, ItemWidgetBasic itemWidgetBasic)
  340. {
  341. LogTool.Log("开始拖动");
  342. if (infoType == 1)
  343. {
  344. return;
  345. }
  346. if (dianjiSkillKongWidget != null)
  347. {
  348. return;
  349. }
  350. SkillKongWidget skillKongWidget1 = itemWidgetBasic as SkillKongWidget;
  351. isDraging = true;
  352. //记录当前选中的格子
  353. nowSkillKongWidget = skillKongWidget1;
  354. dianjiSkillKongWidget = skillKongWidget1;
  355. // Btn_RemoveGongFa.transform.position = dianjiSkillKongWidget.RemovePos.position;
  356. // Btn_RemoveGongFa.gameObject.SetActive(true);
  357. // Btn_Info.transform.position = dianjiSkillKongWidget.InfoPos.position;
  358. // Btn_Info.gameObject.SetActive(true);
  359. SelectSkill(nowSkillKongWidget.SkillInfo, false, false);
  360. nowSkillKongWidget1 = await UIManager.Instance.CreateGComponentForObject<SkillKongWidget>(
  361. SkillKongWidget1game.gameObject,
  362. null, transform.GetComponent<RectTransform>(), uiData: new object[] { false },
  363. isInstance: false);
  364. nowSkillKongWidget1.own.SetActive(true);
  365. nowSkillKongWidget1.InitWidget(nowSkillKongWidget.index, this);
  366. nowSkillKongWidget1.SetSKill(skillKongWidget1.SkillInfo);
  367. }
  368. private void SkillDragHandle(PointerEventData pointerEventData, ItemWidgetBasic itemWidgetBasic)
  369. {
  370. LogTool.Log("拖动中");
  371. if (nowSkillKongWidget1 == null)
  372. return;
  373. Vector2 localPos;
  374. //用于坐标转换的api
  375. RectTransformUtility.ScreenPointToLocalPointInRectangle(
  376. transform.GetComponent<RectTransform>(), //希望得到坐标结果对象的 父对象
  377. pointerEventData.position, //相当于 鼠标位置
  378. pointerEventData.pressEventCamera, //相当于 UI摄像机
  379. out localPos);
  380. nowSkillKongWidget1.transform.localPosition = localPos;
  381. }
  382. private void SkillEndDragHandle(PointerEventData pointerEventData, ItemWidgetBasic itemWidgetBasic)
  383. {
  384. LogTool.Log("结束拖动");
  385. isDraging = false;
  386. nowInSkillKongWidget?.OnPointerClick();
  387. //结束拖动时 置空
  388. nowSkillKongWidget = null;
  389. nowInSkillKongWidget = null;
  390. // CloseSelect();
  391. // BaoChun();
  392. //结束拖动
  393. if (nowSkillKongWidget1 == null)
  394. return;
  395. nowSkillKongWidget1.own.SetActive(false);
  396. // UIManager.Instance.DormancyGComponent(nowSkillKongWidget1);
  397. nowSkillKongWidget1 = null;
  398. }
  399. private void SkillPointEnterHandle(ItemWidgetBasic itemWidgetBasic)
  400. {
  401. LogTool.Log("进入");
  402. if (isDraging)
  403. {
  404. nowInSkillKongWidget = itemWidgetBasic as SkillKongWidget;
  405. return;
  406. }
  407. }
  408. private void SkillPointExitHandle(ItemWidgetBasic itemWidgetBasic)
  409. {
  410. LogTool.Log("离开");
  411. if (isDraging)
  412. {
  413. nowInSkillKongWidget = null;
  414. return;
  415. }
  416. }
  417. private void UpdateRoad()
  418. {
  419. if (currenRoadSkilId != 0)
  420. {
  421. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(currenRoadSkilId);
  422. Text_RoadName.text = LanguageManager.Instance.Text(skillConfig.name);
  423. }
  424. else
  425. {
  426. Text_RoadName.text = "未选择";
  427. }
  428. //
  429. }
  430. private void BaoChun()
  431. {
  432. // ChangeInfoType(1);
  433. // if (isAlter)
  434. {
  435. PlayerManager.Instance.GongFaControl.SaveUseSkill(allUseSkill);
  436. PlayerManager.Instance.GongFaControl.SetTaoismSkillIndex(currenRoadSkilId);
  437. PlayerManager.Instance.myHero.heroData.TaoismSkillId = currenRoadSkilId;
  438. AccountFileInfo.Instance.SavePlayerData();
  439. }
  440. isAlter = false;
  441. }
  442. private void ChangeInfoType(int type)
  443. {
  444. if (type == 1)
  445. {
  446. GongFaSettingRoot.SetActive(false);
  447. infoType = 1;
  448. Btn_Setting.gameObject.SetActive(true);
  449. CloseSelect();
  450. AppBarPanel.OpenPanel(this);
  451. Text_FuZhuGongFaCount.transform.parent.gameObject.SetActive(false);
  452. }
  453. else if (type == 2)
  454. {
  455. GongFaSettingRoot.SetActive(true);
  456. infoType = 2;
  457. allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray();
  458. Btn_Setting.gameObject.SetActive(false);
  459. AppBarPanel.ClosePanel();
  460. Text_FuZhuGongFaCount.transform.parent.gameObject.SetActive(true);
  461. }
  462. }
  463. List<SkillInfo> showSkillInfo = new List<SkillInfo>();
  464. List<List<int>> indexList = new List<List<int>>()
  465. {
  466. new List<int>() { 0, 1, 9 }, //金
  467. new List<int>() { 4, 5, 3 }, //木
  468. new List<int>() { 2, 3, 1 }, //水
  469. new List<int>() { 6, 7, 5 }, //火
  470. new List<int>() { 8, 9, 7 }, //土
  471. };
  472. private void Sort(int type1, int type2)
  473. {
  474. //先排序类型在排属性
  475. if (type1 == 0)
  476. {
  477. BtnRoot.ClickWidget(Btn_All.GetComponent<UIToggleWidgetBasic>());
  478. }
  479. else if (type1 == 1)
  480. {
  481. BtnRoot.ClickWidget(Btn_ZhuDong.GetComponent<UIToggleWidgetBasic>());
  482. }
  483. else if (type1 == 2)
  484. {
  485. BtnRoot.ClickWidget(Btn_FuZu.GetComponent<UIToggleWidgetBasic>());
  486. }
  487. else if (type1 == 5)
  488. {
  489. BtnRoot.ClickWidget(Btn_BeiDong.GetComponent<UIToggleWidgetBasic>());
  490. }
  491. if (type2 == 0)
  492. {
  493. Icon_Select.gameObject.SetActive(false);
  494. }
  495. else if (type2 == 1)
  496. {
  497. Icon_Select.transform.position = Btn_Jin.transform.position;
  498. Icon_Select.gameObject.SetActive(true);
  499. }
  500. else if (type2 == 2)
  501. {
  502. Icon_Select.transform.position = Btn_Mu.transform.position;
  503. Icon_Select.gameObject.SetActive(true);
  504. }
  505. else if (type2 == 4)
  506. {
  507. Icon_Select.transform.position = Btn_Shui.transform.position;
  508. Icon_Select.gameObject.SetActive(true);
  509. }
  510. else if (type2 == 8)
  511. {
  512. Icon_Select.transform.position = Btn_Huo.transform.position;
  513. Icon_Select.gameObject.SetActive(true);
  514. }
  515. else if (type2 == 16)
  516. {
  517. Icon_Select.transform.position = Btn_Tu.transform.position;
  518. Icon_Select.gameObject.SetActive(true);
  519. }
  520. //0代表全部
  521. if (type1 == 0)
  522. {
  523. showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill.ToList();
  524. }
  525. else
  526. {
  527. showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill
  528. .Where(s => s.skillConfig.SkillType == type1).ToList();
  529. }
  530. if (type2 == 0)
  531. {
  532. }
  533. else
  534. {
  535. showSkillInfo = showSkillInfo.Where(s => s.skillConfig.attribute == type2).ToList();
  536. }
  537. CloseSelect();
  538. showSkillInfo.Sort(Sort);
  539. Content.Init(this, showSkillInfo.Count);
  540. }
  541. private int Sort(SkillInfo type1, SkillInfo type2)
  542. {
  543. if (allUseSkill.Contains(type1) && !allUseSkill.Contains(type2))
  544. {
  545. return -1;
  546. }
  547. if (!allUseSkill.Contains(type1) && allUseSkill.Contains(type2))
  548. {
  549. return 1;
  550. }
  551. return type1.skillConfig.SkillType != type2.skillConfig.SkillType
  552. ? type1.skillConfig.SkillType.CompareTo(type2.skillConfig.SkillType)
  553. : type1.skillConfig.ID.CompareTo(type2.skillConfig.ID);
  554. return 0;
  555. }
  556. public override async CTask Open()
  557. {
  558. await base.Open();
  559. Sort(type1, type2);
  560. for (int i = 0; i < 5; i++)
  561. {
  562. double hd = i * 72 * Math.PI / 180f;
  563. double a = Math.Cos(hd);
  564. double b = -Math.Sin(hd);
  565. double c = Math.Sin(hd);
  566. double d = a;
  567. double x = a * 0 + b * 116;
  568. double y = c * 0 + d * 116;
  569. int index = i;
  570. WuXingGongFaWidget widget =
  571. await UIManager.Instance.CreateGComponent<WuXingGongFaWidget>(null, root: WuXingGongFaRoot,
  572. poolName: "132");
  573. widget.transform.anchoredPosition = new Vector2((float)x, (float)y);
  574. widget.ShowWidget(index);
  575. widget.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);
  576. _wuXingGongFaWidgets.Add(widget);
  577. }
  578. for (int i = 0; i < 10; i++)
  579. {
  580. int index = i;
  581. double hd = (36 * i) * Math.PI / 180f;
  582. double a = Math.Cos(hd);
  583. double b = -Math.Sin(hd);
  584. double c = Math.Sin(hd);
  585. double d = a;
  586. double x = a * 0 + b * 190;
  587. double y = c * 0 + d * 190;
  588. Vector2 pos = new Vector2((float)x, (float)y);
  589. SkillKongWidget skillKongWidget = await UIManager.Instance.CreateGComponentForObject<SkillKongWidget>(
  590. kongdongs.gameObject,
  591. null, SkillKongWeiRoot, uiData: new object[] { true },
  592. isInstance: true);
  593. skillKongWidget.InitWidget(index, this);
  594. skillKongWidget.SetSKill(allUseSkill[index]);
  595. skillKongWidget.transform.anchoredPosition = pos;
  596. skillKongWidget.OnClick = OnClickSkillKongWidget;
  597. skillKongWidget.onDragStart = SkillBeginDragHandle;
  598. skillKongWidget.onDrag = SkillDragHandle;
  599. skillKongWidget.onDragEnd = SkillEndDragHandle;
  600. skillKongWidget.onPointerEnter = SkillPointEnterHandle;
  601. skillKongWidget.onPointerExit = SkillPointExitHandle;
  602. allKongSkill.Add(skillKongWidget);
  603. }
  604. ChangeFuZhuYingXiang();
  605. }
  606. private SkillKongWidget dianjiSkillKongWidget;
  607. private async void OnClickSkillKongWidget(ItemWidgetBasic obj)
  608. {
  609. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 7))
  610. {
  611. PlayerGuideManager.Instance.NextGuide();
  612. }
  613. SkillKongWidget skillKongWidget = obj as SkillKongWidget;
  614. if (infoType == 1)
  615. {
  616. if (skillKongWidget.SkillInfo == null)
  617. return;
  618. GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(skillKongWidget.SkillInfo);
  619. await gongFaUpgradePanel.UIClosed();
  620. Sort(type1, type2);
  621. return;
  622. }
  623. Btn_Info.transform.SetParent(transform);
  624. Btn_Info.gameObject.SetActive(false);
  625. currentSelectedSkill = skillKongWidget.SkillInfo;
  626. // SkillKongWidget skillKongWidget = obj as SkillKongWidget;
  627. if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig == null)
  628. {
  629. return;
  630. }
  631. //直接上功法
  632. if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig != null)
  633. {
  634. if (selectSkillConfig.skillConfig.SkillType == 1)
  635. {
  636. if (!IsMainGongFaChange(selectSkillConfig.skillConfig))
  637. {
  638. TipMessagePanel.OpenTipMessagePanel("主动功法已经上满");
  639. CloseSelect();
  640. return;
  641. }
  642. }
  643. if (selectSkillConfig.skillConfig.SkillType == 2)
  644. {
  645. if (!IsPassiveGongFaChange(selectSkillConfig.skillConfig))
  646. {
  647. TipMessagePanel.OpenTipMessagePanel("被动功法已经上满");
  648. CloseSelect();
  649. return;
  650. }
  651. }
  652. isAlter = true;
  653. skillKongWidget.SetSKill(selectSkillConfig);
  654. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  655. if (selectSkillConfig.skillConfig.SkillType == 1)
  656. {
  657. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  658. }
  659. else if (selectSkillConfig.skillConfig.SkillType == 2)
  660. {
  661. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  662. }
  663. CloseSelect();
  664. BaoChun();
  665. showSkillInfo.Sort(Sort);
  666. Content.Init(this, showSkillInfo.Count);
  667. }
  668. //替换功法
  669. else if (skillKongWidget.SkillInfo != null && dianjiSkillKongWidget == null && selectSkillConfig != null)
  670. {
  671. if (!IsPassiveGongFaChange(selectSkillConfig.skillConfig) &&
  672. allUseSkill[skillKongWidget.SkillInfo.index].skillConfig.SkillType != 2)
  673. {
  674. TipMessagePanel.OpenTipMessagePanel("被动功法已经上满");
  675. CloseSelect();
  676. return;
  677. }
  678. if (!IsMainGongFaChange(selectSkillConfig.skillConfig) &&
  679. allUseSkill[skillKongWidget.SkillInfo.index].skillConfig.SkillType != 1)
  680. {
  681. TipMessagePanel.OpenTipMessagePanel("主动功法已经上满");
  682. CloseSelect();
  683. return;
  684. }
  685. isAlter = true;
  686. allUseSkill[skillKongWidget.SkillInfo.index] = null;
  687. skillKongWidget.SetSKill(selectSkillConfig);
  688. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  689. skillKongWidget.SetSKill(selectSkillConfig);
  690. if (selectSkillConfig.skillConfig.SkillType == 1)
  691. {
  692. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  693. }
  694. else if (selectSkillConfig.skillConfig.SkillType == 2)
  695. {
  696. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  697. }
  698. CloseSelect();
  699. BaoChun();
  700. showSkillInfo.Sort(Sort);
  701. Content.Init(this, showSkillInfo.Count);
  702. }
  703. else
  704. {
  705. if (dianjiSkillKongWidget != null && dianjiSkillKongWidget == skillKongWidget)
  706. {
  707. CloseSelect();
  708. return;
  709. }
  710. //交换功法
  711. if (dianjiSkillKongWidget == null)
  712. {
  713. dianjiSkillKongWidget = skillKongWidget;
  714. Btn_RemoveGongFa.transform.position = dianjiSkillKongWidget.RemovePos.position;
  715. Btn_RemoveGongFa.gameObject.SetActive(true);
  716. Btn_Info.transform.position = dianjiSkillKongWidget.InfoPos.position;
  717. Btn_Info.gameObject.SetActive(true);
  718. SelectSkill(skillKongWidget.SkillInfo, false, false);
  719. // if (skillKongWidget.SkillInfo.skillConfig.SkillType == 1)
  720. // {
  721. // AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  722. // }
  723. // else if (skillKongWidget.SkillInfo.skillConfig.SkillType == 2)
  724. // {
  725. // AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  726. // }
  727. }
  728. else
  729. {
  730. isAlter = true;
  731. if (skillKongWidget.SkillInfo != null)
  732. {
  733. dianjiSkillKongWidget.SetSKill(skillKongWidget.SkillInfo);
  734. allUseSkill[dianjiSkillKongWidget.index] = dianjiSkillKongWidget.SkillInfo;
  735. }
  736. else
  737. {
  738. allUseSkill[dianjiSkillKongWidget.SkillInfo.index] = null;
  739. dianjiSkillKongWidget.Cleared();
  740. }
  741. skillKongWidget.SetSKill(selectSkillConfig);
  742. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  743. if (selectSkillConfig.skillConfig.SkillType == 1)
  744. {
  745. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  746. }
  747. else if (selectSkillConfig.skillConfig.SkillType == 2)
  748. {
  749. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  750. }
  751. CloseSelect();
  752. BaoChun();
  753. }
  754. }
  755. UpdateSkillWidget();
  756. }
  757. public void SelectSkill(SkillInfo skillConfig, bool max, bool isClick)
  758. {
  759. for (int i = 0; i < allKongSkill.Count; i++)
  760. {
  761. allKongSkill[i].SelectState(false);
  762. }
  763. if (!max)
  764. {
  765. // if (isClick)
  766. // {
  767. // int index = 0;
  768. //
  769. // //金
  770. // if (skillConfig.skillConfig.attribute == 1)
  771. // {
  772. // index = 0;
  773. // }
  774. //
  775. // //木
  776. // if (skillConfig.skillConfig.attribute == 2)
  777. // {
  778. // index = 1;
  779. // }
  780. //
  781. // //水
  782. // if (skillConfig.skillConfig.attribute == 4)
  783. // {
  784. // index = 2;
  785. // }
  786. //
  787. // //火
  788. // if (skillConfig.skillConfig.attribute == 8)
  789. // {
  790. // index = 3;
  791. // }
  792. //
  793. // //土
  794. // if (skillConfig.skillConfig.attribute == 16)
  795. // {
  796. // index = 4;
  797. // }
  798. //
  799. // bool isSuccess = false;
  800. //
  801. // //先上对应位置
  802. // foreach (var i in indexList[index])
  803. // {
  804. // if (allKongSkill[i].SkillInfo == null)
  805. // {
  806. // allKongSkill[i].SetSKill(skillConfig);
  807. // allUseSkill[i] = skillConfig;
  808. // isSuccess = true;
  809. // break;
  810. // }
  811. // }
  812. //
  813. // //对应位置已经上了 ,就随便找给位置上
  814. // if (!isSuccess)
  815. // {
  816. // for (var i = 0; i < allKongSkill.Count; i++)
  817. // {
  818. // if (allKongSkill[i].SkillInfo == null)
  819. // {
  820. // allKongSkill[i].SetSKill(skillConfig);
  821. // allUseSkill[i] = skillConfig;
  822. // break;
  823. // }
  824. // }
  825. // }
  826. //
  827. // if (isSuccess)
  828. // {
  829. // BaoChun();
  830. // ChangeFuZhuYingXiang();
  831. // UpdateSkillWidget();
  832. // showSkillInfo.Sort(Sort);
  833. // Content.Init(this, showSkillInfo.Count);
  834. // }
  835. // else
  836. // {
  837. // for (int i = 0; i < allKongSkill.Count; i++)
  838. // {
  839. // allKongSkill[i].SelectState(true);
  840. // }
  841. // }
  842. // }
  843. // else
  844. {
  845. selectSkillConfig = skillConfig;
  846. _isSelectSkill = true;
  847. for (int i = 0; i < allKongSkill.Count; i++)
  848. {
  849. allKongSkill[i].SelectState(true);
  850. }
  851. }
  852. }
  853. else
  854. {
  855. selectSkillConfig = skillConfig;
  856. _isSelectSkill = true;
  857. for (int i = 0; i < allKongSkill.Count; i++)
  858. {
  859. if (allKongSkill[i].SkillInfo != null)
  860. {
  861. if (selectSkillConfig.skillConfig.SkillType == allKongSkill[i].SkillInfo.skillConfig.SkillType)
  862. allKongSkill[i].SelectState(true);
  863. }
  864. }
  865. }
  866. }
  867. List<int> yingxiang = new List<int>();
  868. private void CloseSelect()
  869. {
  870. _isSelectSkill = false;
  871. selectSkillConfig = null;
  872. dianjiSkillKongWidget = null;
  873. Btn_RemoveGongFa.gameObject.SetActive(false);
  874. Btn_Info.transform.SetParent(transform);
  875. Btn_Info.gameObject.SetActive(false);
  876. currentSelectedSkill = null;
  877. for (int i = 0; i < allKongSkill.Count; i++)
  878. {
  879. allKongSkill[i].SelectState(false);
  880. }
  881. ChangeFuZhuYingXiang();
  882. }
  883. private void ChangeFuZhuYingXiang()
  884. {
  885. yingxiang.Clear();
  886. float addcd = 0;
  887. for (int i = 0; i < allKongSkill.Count; i++)
  888. {
  889. allKongSkill[i].Icon_YingXiang.gameObject.SetActive(false);
  890. if (allKongSkill[i].SkillInfo != null)
  891. {
  892. addcd += allKongSkill[i].SkillInfo.skillConfig.addcd;
  893. }
  894. if (allKongSkill[i].SkillInfo != null && allKongSkill[i].SkillInfo.skillConfig.SkillType == 2 &&
  895. allKongSkill[i].SkillInfo.skillConfig.PromoteLanPara_1 != null)
  896. {
  897. foreach (var f in allKongSkill[i].SkillInfo.skillConfig.PromoteLanPara_1)
  898. {
  899. if (f != 0)
  900. {
  901. var nubs = GetNumbers(i, f);
  902. foreach (var nub in nubs)
  903. {
  904. if (!yingxiang.Contains(nub))
  905. {
  906. yingxiang.Add(nub);
  907. }
  908. }
  909. }
  910. }
  911. }
  912. }
  913. foreach (var i in yingxiang)
  914. {
  915. allKongSkill[i].Icon_YingXiang.gameObject.SetActive(true);
  916. }
  917. Text_Cd.text = LanguageManager.Instance.Text(10208,
  918. ((PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum *
  919. PlayerManager.Instance.gameConstantConfig.BasicCDperSkill / 1000) + addcd));
  920. }
  921. public List<int> GetNumbers(int start, float offset)
  922. {
  923. List<int> indexs = new List<int>();
  924. for (int i = 0; i < Math.Abs(offset); i++)
  925. {
  926. if (offset >= 0)
  927. {
  928. indexs.Add(SafeMod(start + i + 1));
  929. }
  930. else
  931. {
  932. indexs.Add(SafeMod(start - i - 1));
  933. }
  934. }
  935. // 确保结果在0-9范围内(循环数组)
  936. int SafeMod(int n) => (n % 10 + 10) % 10;
  937. return indexs;
  938. }
  939. public override void Hide()
  940. {
  941. base.Hide();
  942. CombatDrive.Instance.CombatController.isUpdate = true;
  943. }
  944. public List<SkillWidget> _skillWidgets = new List<SkillWidget>();
  945. public async CTask<IScorllListWidget> GetIScorllListWidget(int index, RectTransform root)
  946. {
  947. if (index < 0 || index >= showSkillInfo.Count)
  948. return null;
  949. SkillInfo skillInfo = showSkillInfo[index];
  950. SkillWidget skillWidget = await UIManager.Instance.CreateGComponent<SkillWidget>(null, ContentRoot);
  951. skillWidget.InitSkillWidget(skillInfo);
  952. skillWidget.OnClick = OnClick;
  953. if (allUseSkill.Contains(skillWidget.skillConfigId))
  954. {
  955. skillWidget.Icon_Marsk.SetActive(true);
  956. }
  957. else
  958. {
  959. skillWidget.Icon_Marsk.SetActive(false);
  960. }
  961. _skillWidgets.Add(skillWidget);
  962. return skillWidget;
  963. }
  964. private void UpdateSkillWidget()
  965. {
  966. foreach (var skillWidget in _skillWidgets)
  967. {
  968. if (allUseSkill.Contains(skillWidget.skillConfigId))
  969. {
  970. skillWidget.Icon_Marsk.SetActive(true);
  971. }
  972. else
  973. {
  974. skillWidget.Icon_Marsk.SetActive(false);
  975. }
  976. }
  977. Text_GongFaCount.text = LanguageManager.Instance.Text(10210, GetMainGongFaCount(),
  978. PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum);
  979. Text_FuZhuGongFaCount.text = LanguageManager.Instance.Text(10209, GetPassiveGongFaCount(),
  980. PlayerManager.Instance.myHero.powerUpConfig.MaxPassiveGongfaNum);
  981. }
  982. private async void OnClick(ItemWidgetBasic obj)
  983. {
  984. SkillWidget skillWidget = obj as SkillWidget;
  985. if (infoType == 1)
  986. {
  987. GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(skillWidget.skillConfigId);
  988. await gongFaUpgradePanel.UIClosed();
  989. Sort(type1, type2);
  990. }
  991. else if (infoType == 2)
  992. {
  993. CloseSelect();
  994. Btn_Info.transform.SetParent(ContentRoot);
  995. Btn_Info.transform.position = skillWidget.InfoPos.position;
  996. Btn_Info.gameObject.SetActive(true);
  997. currentSelectedSkill = skillWidget.skillConfigId;
  998. if (allUseSkill.Contains(skillWidget.skillConfigId))
  999. {
  1000. return;
  1001. }
  1002. Btn_RemoveGongFa.gameObject.SetActive(false);
  1003. if (!IsMainGongFaChange(skillWidget.skillConfigId.skillConfig) ||
  1004. !IsPassiveGongFaChange(skillWidget.skillConfigId.skillConfig))
  1005. {
  1006. SelectSkill(skillWidget.skillConfigId, true, true);
  1007. }
  1008. else
  1009. {
  1010. SelectSkill(skillWidget.skillConfigId, false, true);
  1011. }
  1012. }
  1013. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 5))
  1014. {
  1015. PlayerGuideManager.Instance.NextGuide();
  1016. }
  1017. }
  1018. /// <summary>
  1019. /// 获得主功法数量
  1020. /// </summary>
  1021. /// <returns></returns>
  1022. private int GetMainGongFaCount()
  1023. {
  1024. int count = 0;
  1025. for (var i = 0; i < allUseSkill.Length; i++)
  1026. {
  1027. if (allUseSkill[i] != null && allUseSkill[i].skillConfig.SkillType == 1)
  1028. {
  1029. count++;
  1030. }
  1031. }
  1032. return count;
  1033. }
  1034. /// <summary>
  1035. /// 获得被动功法数量
  1036. /// </summary>
  1037. /// <returns></returns>
  1038. private int GetPassiveGongFaCount()
  1039. {
  1040. int count = 0;
  1041. for (var i = 0; i < allUseSkill.Length; i++)
  1042. {
  1043. if (allUseSkill[i] != null && allUseSkill[i].skillConfig.SkillType == 2)
  1044. {
  1045. count++;
  1046. }
  1047. }
  1048. return count;
  1049. }
  1050. private bool IsMainGongFaChange(SkillConfig s)
  1051. {
  1052. if (GetMainGongFaCount() < PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum ||
  1053. s.SkillType != 1)
  1054. {
  1055. return true;
  1056. }
  1057. else
  1058. {
  1059. return false;
  1060. }
  1061. }
  1062. private bool IsPassiveGongFaChange(SkillConfig s)
  1063. {
  1064. if (GetPassiveGongFaCount() < PlayerManager.Instance.myHero.powerUpConfig.MaxPassiveGongfaNum ||
  1065. s.SkillType != 2)
  1066. {
  1067. return true;
  1068. }
  1069. else
  1070. {
  1071. return false;
  1072. }
  1073. }
  1074. public void HindIScorllListWidget(IScorllListWidget widget)
  1075. {
  1076. UIManager.Instance.DormancyGComponent(widget as SkillWidget);
  1077. _skillWidgets.Remove(widget as SkillWidget);
  1078. }
  1079. public override void Close()
  1080. {
  1081. foreach (var skillWidget in _skillWidgets)
  1082. {
  1083. UIManager.Instance.DormancyGComponent(skillWidget);
  1084. }
  1085. _skillWidgets.Clear();
  1086. foreach (var skillKongWidget in allKongSkill)
  1087. {
  1088. // UIManager.Instance.DormancyGComponent(skillKongWidget);
  1089. }
  1090. allKongSkill.Clear();
  1091. foreach (var wuXingGongFaWidget in _wuXingGongFaWidgets)
  1092. {
  1093. UIManager.Instance.DormancyGComponent(wuXingGongFaWidget);
  1094. }
  1095. Icon_Select.gameObject.SetActive(false);
  1096. _wuXingGongFaWidgets.Clear();
  1097. CloseSelect();
  1098. // ChangeInfoType(1);
  1099. base.Close();
  1100. }
  1101. }
  1102. }