SkillSelectPanel.cs 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  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. if (skillKongWidget1.SkillInfo == null)
  352. return;
  353. isDraging = true;
  354. //记录当前选中的格子
  355. nowSkillKongWidget = skillKongWidget1;
  356. nowSkillKongWidget.Translucency();
  357. dianjiSkillKongWidget = skillKongWidget1;
  358. SelectSkill(nowSkillKongWidget.SkillInfo, false, false);
  359. nowSkillKongWidget1 = await UIManager.Instance.CreateGComponentForObject<SkillKongWidget>(
  360. SkillKongWidget1game.gameObject,
  361. null, transform.GetComponent<RectTransform>(), uiData: new object[] { false,false },
  362. isInstance: false);
  363. nowSkillKongWidget1.own.SetActive(true);
  364. nowSkillKongWidget1.InitWidget(nowSkillKongWidget.index, this);
  365. nowSkillKongWidget1.SetSKill(skillKongWidget1.SkillInfo);
  366. }
  367. private void SkillDragHandle(PointerEventData pointerEventData, ItemWidgetBasic itemWidgetBasic)
  368. {
  369. LogTool.Log("拖动中");
  370. if (nowSkillKongWidget1 == null)
  371. return;
  372. Vector2 localPos;
  373. RectTransformUtility.ScreenPointToLocalPointInRectangle(
  374. transform.GetComponent<RectTransform>(),
  375. pointerEventData.position,
  376. pointerEventData.pressEventCamera,
  377. out localPos);
  378. nowSkillKongWidget1.transform.localPosition = localPos;
  379. }
  380. private void SkillEndDragHandle(PointerEventData pointerEventData, ItemWidgetBasic itemWidgetBasic)
  381. {
  382. LogTool.Log("结束拖动");
  383. isDraging = false;
  384. nowSkillKongWidget?.Opaque();
  385. if (nowInSkillKongWidget == null)
  386. {
  387. CloseSelect();
  388. }
  389. nowInSkillKongWidget?.OnPointerClick();
  390. nowSkillKongWidget = null;
  391. if (nowInSkillKongWidget != null)
  392. {
  393. nowInSkillKongWidget.transform.localScale = Vector3.one;
  394. }
  395. nowInSkillKongWidget = null;
  396. if (nowSkillKongWidget1 == null)
  397. return;
  398. nowSkillKongWidget1.own.SetActive(false);
  399. nowSkillKongWidget1 = null;
  400. }
  401. private void SkillPointEnterHandle(ItemWidgetBasic itemWidgetBasic)
  402. {
  403. LogTool.Log("进入");
  404. if (isDraging)
  405. {
  406. nowInSkillKongWidget = itemWidgetBasic as SkillKongWidget;
  407. nowInSkillKongWidget.transform.localScale = Vector3.one * 1.1f;
  408. return;
  409. }
  410. }
  411. private void SkillPointExitHandle(ItemWidgetBasic itemWidgetBasic)
  412. {
  413. LogTool.Log("离开");
  414. if (isDraging)
  415. {
  416. if (nowInSkillKongWidget != null)
  417. nowInSkillKongWidget.transform.localScale = Vector3.one;
  418. nowInSkillKongWidget = null;
  419. return;
  420. }
  421. }
  422. private void UpdateRoad()
  423. {
  424. if (currenRoadSkilId != 0)
  425. {
  426. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(currenRoadSkilId);
  427. Text_RoadName.text = LanguageManager.Instance.Text(skillConfig.name);
  428. }
  429. else
  430. {
  431. Text_RoadName.text = "未选择";
  432. }
  433. //
  434. }
  435. private void BaoChun()
  436. {
  437. // ChangeInfoType(1);
  438. // if (isAlter)
  439. {
  440. PlayerManager.Instance.GongFaControl.SaveUseSkill(allUseSkill);
  441. PlayerManager.Instance.GongFaControl.SetTaoismSkillIndex(currenRoadSkilId);
  442. PlayerManager.Instance.myHero.heroData.TaoismSkillId = currenRoadSkilId;
  443. AccountFileInfo.Instance.SavePlayerData();
  444. }
  445. isAlter = false;
  446. }
  447. private void ChangeInfoType(int type)
  448. {
  449. if (type == 1)
  450. {
  451. GongFaSettingRoot.SetActive(false);
  452. infoType = 1;
  453. Btn_Setting.gameObject.SetActive(true);
  454. CloseSelect();
  455. AppBarPanel.OpenPanel(this);
  456. Text_FuZhuGongFaCount.transform.parent.gameObject.SetActive(false);
  457. }
  458. else if (type == 2)
  459. {
  460. GongFaSettingRoot.SetActive(true);
  461. infoType = 2;
  462. allUseSkill = PlayerManager.Instance.GongFaControl.allUseSkill.ToArray();
  463. Btn_Setting.gameObject.SetActive(false);
  464. AppBarPanel.ClosePanel();
  465. Text_FuZhuGongFaCount.transform.parent.gameObject.SetActive(true);
  466. }
  467. }
  468. List<SkillInfo> showSkillInfo = new List<SkillInfo>();
  469. List<List<int>> indexList = new List<List<int>>()
  470. {
  471. new List<int>() { 0, 1, 9 }, //金
  472. new List<int>() { 4, 5, 3 }, //木
  473. new List<int>() { 2, 3, 1 }, //水
  474. new List<int>() { 6, 7, 5 }, //火
  475. new List<int>() { 8, 9, 7 }, //土
  476. };
  477. private void Sort(int type1, int type2)
  478. {
  479. //先排序类型在排属性
  480. if (type1 == 0)
  481. {
  482. BtnRoot.ClickWidget(Btn_All.GetComponent<UIToggleWidgetBasic>());
  483. }
  484. else if (type1 == 1)
  485. {
  486. BtnRoot.ClickWidget(Btn_ZhuDong.GetComponent<UIToggleWidgetBasic>());
  487. }
  488. else if (type1 == 2)
  489. {
  490. BtnRoot.ClickWidget(Btn_FuZu.GetComponent<UIToggleWidgetBasic>());
  491. }
  492. else if (type1 == 5)
  493. {
  494. BtnRoot.ClickWidget(Btn_BeiDong.GetComponent<UIToggleWidgetBasic>());
  495. }
  496. if (type2 == 0)
  497. {
  498. Icon_Select.gameObject.SetActive(false);
  499. }
  500. else if (type2 == 1)
  501. {
  502. Icon_Select.transform.position = Btn_Jin.transform.position;
  503. Icon_Select.gameObject.SetActive(true);
  504. }
  505. else if (type2 == 2)
  506. {
  507. Icon_Select.transform.position = Btn_Mu.transform.position;
  508. Icon_Select.gameObject.SetActive(true);
  509. }
  510. else if (type2 == 4)
  511. {
  512. Icon_Select.transform.position = Btn_Shui.transform.position;
  513. Icon_Select.gameObject.SetActive(true);
  514. }
  515. else if (type2 == 8)
  516. {
  517. Icon_Select.transform.position = Btn_Huo.transform.position;
  518. Icon_Select.gameObject.SetActive(true);
  519. }
  520. else if (type2 == 16)
  521. {
  522. Icon_Select.transform.position = Btn_Tu.transform.position;
  523. Icon_Select.gameObject.SetActive(true);
  524. }
  525. //0代表全部
  526. if (type1 == 0)
  527. {
  528. showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill.ToList();
  529. }
  530. else
  531. {
  532. showSkillInfo = PlayerManager.Instance.GongFaControl.allSkill
  533. .Where(s => s.skillConfig.SkillType == type1).ToList();
  534. }
  535. if (type2 == 0)
  536. {
  537. }
  538. else
  539. {
  540. showSkillInfo = showSkillInfo.Where(s => s.skillConfig.attribute == type2).ToList();
  541. }
  542. CloseSelect();
  543. showSkillInfo.Sort(Sort);
  544. Content.Init(this, showSkillInfo.Count);
  545. }
  546. private int Sort(SkillInfo type1, SkillInfo type2)
  547. {
  548. if (allUseSkill.Contains(type1) && !allUseSkill.Contains(type2))
  549. {
  550. return -1;
  551. }
  552. if (!allUseSkill.Contains(type1) && allUseSkill.Contains(type2))
  553. {
  554. return 1;
  555. }
  556. return type1.skillConfig.SkillType != type2.skillConfig.SkillType
  557. ? type1.skillConfig.SkillType.CompareTo(type2.skillConfig.SkillType)
  558. : type1.skillConfig.ID.CompareTo(type2.skillConfig.ID);
  559. return 0;
  560. }
  561. public override async CTask Open()
  562. {
  563. await base.Open();
  564. Sort(type1, type2);
  565. for (int i = 0; i < 5; i++)
  566. {
  567. double hd = i * 72 * Math.PI / 180f;
  568. double a = Math.Cos(hd);
  569. double b = -Math.Sin(hd);
  570. double c = Math.Sin(hd);
  571. double d = a;
  572. double x = a * 0 + b * 116;
  573. double y = c * 0 + d * 116;
  574. int index = i;
  575. WuXingGongFaWidget widget =
  576. await UIManager.Instance.CreateGComponent<WuXingGongFaWidget>(null, root: WuXingGongFaRoot,
  577. poolName: "132");
  578. widget.transform.anchoredPosition = new Vector2((float)x, (float)y);
  579. widget.ShowWidget(index);
  580. widget.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);
  581. _wuXingGongFaWidgets.Add(widget);
  582. }
  583. for (int i = 0; i < 10; i++)
  584. {
  585. int index = i;
  586. double hd = (36 * i) * Math.PI / 180f;
  587. double a = Math.Cos(hd);
  588. double b = -Math.Sin(hd);
  589. double c = Math.Sin(hd);
  590. double d = a;
  591. double x = a * 0 + b * 190;
  592. double y = c * 0 + d * 190;
  593. Vector2 pos = new Vector2((float)x, (float)y);
  594. SkillKongWidget skillKongWidget = await UIManager.Instance.CreateGComponentForObject<SkillKongWidget>(
  595. kongdongs.gameObject,
  596. null, SkillKongWeiRoot, uiData: new object[] { true,true },
  597. isInstance: true);
  598. skillKongWidget.InitWidget(index, this);
  599. skillKongWidget.SetSKill(allUseSkill[index]);
  600. skillKongWidget.transform.anchoredPosition = pos;
  601. skillKongWidget.OnClick = OnClickSkillKongWidget;
  602. skillKongWidget.onDragStart = SkillBeginDragHandle;
  603. skillKongWidget.onDrag = SkillDragHandle;
  604. skillKongWidget.onDragEnd = SkillEndDragHandle;
  605. skillKongWidget.onPointerEnter = SkillPointEnterHandle;
  606. skillKongWidget.onPointerExit = SkillPointExitHandle;
  607. allKongSkill.Add(skillKongWidget);
  608. }
  609. ChangeFuZhuYingXiang();
  610. }
  611. private SkillKongWidget dianjiSkillKongWidget;
  612. private async void OnClickSkillKongWidget(ItemWidgetBasic obj)
  613. {
  614. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 7))
  615. {
  616. PlayerGuideManager.Instance.NextGuide();
  617. }
  618. SkillKongWidget skillKongWidget = obj as SkillKongWidget;
  619. if (infoType == 1)
  620. {
  621. if (skillKongWidget.SkillInfo == null)
  622. return;
  623. GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(skillKongWidget.SkillInfo);
  624. await gongFaUpgradePanel.UIClosed();
  625. Sort(type1, type2);
  626. return;
  627. }
  628. Btn_Info.transform.SetParent(transform);
  629. Btn_Info.gameObject.SetActive(false);
  630. currentSelectedSkill = skillKongWidget.SkillInfo;
  631. // SkillKongWidget skillKongWidget = obj as SkillKongWidget;
  632. if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig == null)
  633. {
  634. return;
  635. }
  636. //直接上功法
  637. if (skillKongWidget.SkillInfo == null && dianjiSkillKongWidget == null && selectSkillConfig != null)
  638. {
  639. if (selectSkillConfig.skillConfig.SkillType == 1)
  640. {
  641. if (!IsMainGongFaChange(selectSkillConfig.skillConfig))
  642. {
  643. TipMessagePanel.OpenTipMessagePanel("主动功法已经上满");
  644. CloseSelect();
  645. return;
  646. }
  647. }
  648. if (selectSkillConfig.skillConfig.SkillType == 2)
  649. {
  650. if (!IsPassiveGongFaChange(selectSkillConfig.skillConfig))
  651. {
  652. TipMessagePanel.OpenTipMessagePanel("被动功法已经上满");
  653. CloseSelect();
  654. return;
  655. }
  656. }
  657. isAlter = true;
  658. skillKongWidget.SetSKill(selectSkillConfig);
  659. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  660. if (selectSkillConfig.skillConfig.SkillType == 1)
  661. {
  662. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  663. }
  664. else if (selectSkillConfig.skillConfig.SkillType == 2)
  665. {
  666. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  667. }
  668. CloseSelect();
  669. BaoChun();
  670. showSkillInfo.Sort(Sort);
  671. Content.Init(this, showSkillInfo.Count);
  672. }
  673. //替换功法
  674. else if (skillKongWidget.SkillInfo != null && dianjiSkillKongWidget == null && selectSkillConfig != null)
  675. {
  676. if (!IsPassiveGongFaChange(selectSkillConfig.skillConfig) &&
  677. allUseSkill[skillKongWidget.SkillInfo.index].skillConfig.SkillType != 2)
  678. {
  679. TipMessagePanel.OpenTipMessagePanel("被动功法已经上满");
  680. CloseSelect();
  681. return;
  682. }
  683. if (!IsMainGongFaChange(selectSkillConfig.skillConfig) &&
  684. allUseSkill[skillKongWidget.SkillInfo.index].skillConfig.SkillType != 1)
  685. {
  686. TipMessagePanel.OpenTipMessagePanel("主动功法已经上满");
  687. CloseSelect();
  688. return;
  689. }
  690. isAlter = true;
  691. allUseSkill[skillKongWidget.SkillInfo.index] = null;
  692. skillKongWidget.SetSKill(selectSkillConfig);
  693. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  694. skillKongWidget.SetSKill(selectSkillConfig);
  695. if (selectSkillConfig.skillConfig.SkillType == 1)
  696. {
  697. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  698. }
  699. else if (selectSkillConfig.skillConfig.SkillType == 2)
  700. {
  701. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  702. }
  703. CloseSelect();
  704. BaoChun();
  705. showSkillInfo.Sort(Sort);
  706. Content.Init(this, showSkillInfo.Count);
  707. }
  708. else
  709. {
  710. if (dianjiSkillKongWidget != null && dianjiSkillKongWidget == skillKongWidget)
  711. {
  712. CloseSelect();
  713. return;
  714. }
  715. //交换功法
  716. if (dianjiSkillKongWidget == null)
  717. {
  718. dianjiSkillKongWidget = skillKongWidget;
  719. Btn_RemoveGongFa.transform.position = dianjiSkillKongWidget.RemovePos.position;
  720. Btn_RemoveGongFa.gameObject.SetActive(true);
  721. Btn_Info.transform.position = dianjiSkillKongWidget.InfoPos.position;
  722. Btn_Info.gameObject.SetActive(true);
  723. SelectSkill(skillKongWidget.SkillInfo, false, false);
  724. // if (skillKongWidget.SkillInfo.skillConfig.SkillType == 1)
  725. // {
  726. // AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  727. // }
  728. // else if (skillKongWidget.SkillInfo.skillConfig.SkillType == 2)
  729. // {
  730. // AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  731. // }
  732. }
  733. else
  734. {
  735. isAlter = true;
  736. if (skillKongWidget.SkillInfo != null)
  737. {
  738. dianjiSkillKongWidget.SetSKill(skillKongWidget.SkillInfo);
  739. allUseSkill[dianjiSkillKongWidget.index] = dianjiSkillKongWidget.SkillInfo;
  740. }
  741. else
  742. {
  743. allUseSkill[dianjiSkillKongWidget.SkillInfo.index] = null;
  744. dianjiSkillKongWidget.Cleared();
  745. }
  746. skillKongWidget.SetSKill(selectSkillConfig);
  747. allUseSkill[skillKongWidget.index] = selectSkillConfig;
  748. if (selectSkillConfig.skillConfig.SkillType == 1)
  749. {
  750. AudioManager.Instance.PlayAudio("ui_xiazhenggongfa.wav");
  751. }
  752. else if (selectSkillConfig.skillConfig.SkillType == 2)
  753. {
  754. AudioManager.Instance.PlayAudio("ui_fzgf_yx.wav");
  755. }
  756. CloseSelect();
  757. BaoChun();
  758. }
  759. }
  760. UpdateSkillWidget();
  761. }
  762. public void SelectSkill(SkillInfo skillConfig, bool max, bool isClick)
  763. {
  764. for (int i = 0; i < allKongSkill.Count; i++)
  765. {
  766. allKongSkill[i].SelectState(false);
  767. }
  768. if (!max)
  769. {
  770. // if (isClick)
  771. // {
  772. // int index = 0;
  773. //
  774. // //金
  775. // if (skillConfig.skillConfig.attribute == 1)
  776. // {
  777. // index = 0;
  778. // }
  779. //
  780. // //木
  781. // if (skillConfig.skillConfig.attribute == 2)
  782. // {
  783. // index = 1;
  784. // }
  785. //
  786. // //水
  787. // if (skillConfig.skillConfig.attribute == 4)
  788. // {
  789. // index = 2;
  790. // }
  791. //
  792. // //火
  793. // if (skillConfig.skillConfig.attribute == 8)
  794. // {
  795. // index = 3;
  796. // }
  797. //
  798. // //土
  799. // if (skillConfig.skillConfig.attribute == 16)
  800. // {
  801. // index = 4;
  802. // }
  803. //
  804. // bool isSuccess = false;
  805. //
  806. // //先上对应位置
  807. // foreach (var i in indexList[index])
  808. // {
  809. // if (allKongSkill[i].SkillInfo == null)
  810. // {
  811. // allKongSkill[i].SetSKill(skillConfig);
  812. // allUseSkill[i] = skillConfig;
  813. // isSuccess = true;
  814. // break;
  815. // }
  816. // }
  817. //
  818. // //对应位置已经上了 ,就随便找给位置上
  819. // if (!isSuccess)
  820. // {
  821. // for (var i = 0; i < allKongSkill.Count; i++)
  822. // {
  823. // if (allKongSkill[i].SkillInfo == null)
  824. // {
  825. // allKongSkill[i].SetSKill(skillConfig);
  826. // allUseSkill[i] = skillConfig;
  827. // break;
  828. // }
  829. // }
  830. // }
  831. //
  832. // if (isSuccess)
  833. // {
  834. // BaoChun();
  835. // ChangeFuZhuYingXiang();
  836. // UpdateSkillWidget();
  837. // showSkillInfo.Sort(Sort);
  838. // Content.Init(this, showSkillInfo.Count);
  839. // }
  840. // else
  841. // {
  842. // for (int i = 0; i < allKongSkill.Count; i++)
  843. // {
  844. // allKongSkill[i].SelectState(true);
  845. // }
  846. // }
  847. // }
  848. // else
  849. {
  850. selectSkillConfig = skillConfig;
  851. _isSelectSkill = true;
  852. for (int i = 0; i < allKongSkill.Count; i++)
  853. {
  854. allKongSkill[i].SelectState(true);
  855. }
  856. }
  857. }
  858. else
  859. {
  860. selectSkillConfig = skillConfig;
  861. _isSelectSkill = true;
  862. for (int i = 0; i < allKongSkill.Count; i++)
  863. {
  864. if (allKongSkill[i].SkillInfo != null)
  865. {
  866. if (selectSkillConfig.skillConfig.SkillType == allKongSkill[i].SkillInfo.skillConfig.SkillType)
  867. allKongSkill[i].SelectState(true);
  868. }
  869. }
  870. }
  871. }
  872. List<int> yingxiang = new List<int>();
  873. private void CloseSelect()
  874. {
  875. _isSelectSkill = false;
  876. selectSkillConfig = null;
  877. dianjiSkillKongWidget = null;
  878. Btn_RemoveGongFa.gameObject.SetActive(false);
  879. Btn_Info.transform.SetParent(transform);
  880. Btn_Info.gameObject.SetActive(false);
  881. currentSelectedSkill = null;
  882. for (int i = 0; i < allKongSkill.Count; i++)
  883. {
  884. allKongSkill[i].SelectState(false);
  885. }
  886. ChangeFuZhuYingXiang();
  887. }
  888. private void ChangeFuZhuYingXiang()
  889. {
  890. yingxiang.Clear();
  891. float addcd = 0;
  892. for (int i = 0; i < allKongSkill.Count; i++)
  893. {
  894. allKongSkill[i].Icon_YingXiang.gameObject.SetActive(false);
  895. if (allKongSkill[i].SkillInfo != null)
  896. {
  897. addcd += allKongSkill[i].SkillInfo.skillConfig.addcd;
  898. }
  899. if (allKongSkill[i].SkillInfo != null && allKongSkill[i].SkillInfo.skillConfig.SkillType == 2 &&
  900. allKongSkill[i].SkillInfo.skillConfig.PromoteLanPara_1 != null)
  901. {
  902. foreach (var f in allKongSkill[i].SkillInfo.skillConfig.PromoteLanPara_1)
  903. {
  904. if (f != 0)
  905. {
  906. var nubs = GetNumbers(i, f);
  907. foreach (var nub in nubs)
  908. {
  909. if (!yingxiang.Contains(nub))
  910. {
  911. yingxiang.Add(nub);
  912. }
  913. }
  914. }
  915. }
  916. }
  917. }
  918. foreach (var i in yingxiang)
  919. {
  920. allKongSkill[i].Icon_YingXiang.gameObject.SetActive(true);
  921. }
  922. Text_Cd.text = LanguageManager.Instance.Text(10208,
  923. ((PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum *
  924. PlayerManager.Instance.gameConstantConfig.BasicCDperSkill / 1000) + addcd));
  925. }
  926. public List<int> GetNumbers(int start, float offset)
  927. {
  928. List<int> indexs = new List<int>();
  929. for (int i = 0; i < Math.Abs(offset); i++)
  930. {
  931. if (offset >= 0)
  932. {
  933. indexs.Add(SafeMod(start + i + 1));
  934. }
  935. else
  936. {
  937. indexs.Add(SafeMod(start - i - 1));
  938. }
  939. }
  940. // 确保结果在0-9范围内(循环数组)
  941. int SafeMod(int n) => (n % 10 + 10) % 10;
  942. return indexs;
  943. }
  944. public override void Hide()
  945. {
  946. base.Hide();
  947. CombatDrive.Instance.CombatController.isUpdate = true;
  948. }
  949. public List<SkillWidget> _skillWidgets = new List<SkillWidget>();
  950. public async CTask<IScorllListWidget> GetIScorllListWidget(int index, RectTransform root)
  951. {
  952. if (index < 0 || index >= showSkillInfo.Count)
  953. return null;
  954. SkillInfo skillInfo = showSkillInfo[index];
  955. SkillWidget skillWidget = await UIManager.Instance.CreateGComponent<SkillWidget>(null, ContentRoot);
  956. skillWidget.InitSkillWidget(skillInfo);
  957. skillWidget.OnClick = OnClick;
  958. if (allUseSkill.Contains(skillWidget.skillConfigId))
  959. {
  960. skillWidget.Icon_Marsk.SetActive(true);
  961. }
  962. else
  963. {
  964. skillWidget.Icon_Marsk.SetActive(false);
  965. }
  966. _skillWidgets.Add(skillWidget);
  967. return skillWidget;
  968. }
  969. private void UpdateSkillWidget()
  970. {
  971. foreach (var skillWidget in _skillWidgets)
  972. {
  973. if (allUseSkill.Contains(skillWidget.skillConfigId))
  974. {
  975. skillWidget.Icon_Marsk.SetActive(true);
  976. }
  977. else
  978. {
  979. skillWidget.Icon_Marsk.SetActive(false);
  980. }
  981. }
  982. Text_GongFaCount.text = LanguageManager.Instance.Text(10210, GetMainGongFaCount(),
  983. PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum);
  984. Text_FuZhuGongFaCount.text = LanguageManager.Instance.Text(10209, GetPassiveGongFaCount(),
  985. PlayerManager.Instance.myHero.powerUpConfig.MaxPassiveGongfaNum);
  986. }
  987. private async void OnClick(ItemWidgetBasic obj)
  988. {
  989. SkillWidget skillWidget = obj as SkillWidget;
  990. if (infoType == 1)
  991. {
  992. GongFaUpgradePanel gongFaUpgradePanel = await GongFaUpgradePanel.Open(skillWidget.skillConfigId);
  993. await gongFaUpgradePanel.UIClosed();
  994. Sort(type1, type2);
  995. }
  996. else if (infoType == 2)
  997. {
  998. CloseSelect();
  999. Btn_Info.transform.SetParent(ContentRoot);
  1000. Btn_Info.transform.position = skillWidget.InfoPos.position;
  1001. Btn_Info.gameObject.SetActive(true);
  1002. currentSelectedSkill = skillWidget.skillConfigId;
  1003. if (allUseSkill.Contains(skillWidget.skillConfigId))
  1004. {
  1005. return;
  1006. }
  1007. Btn_RemoveGongFa.gameObject.SetActive(false);
  1008. if (!IsMainGongFaChange(skillWidget.skillConfigId.skillConfig) ||
  1009. !IsPassiveGongFaChange(skillWidget.skillConfigId.skillConfig))
  1010. {
  1011. SelectSkill(skillWidget.skillConfigId, true, true);
  1012. }
  1013. else
  1014. {
  1015. SelectSkill(skillWidget.skillConfigId, false, true);
  1016. }
  1017. }
  1018. if (PlayerGuideManager.Instance.GuideIsCanDo(4, 5))
  1019. {
  1020. PlayerGuideManager.Instance.NextGuide();
  1021. }
  1022. }
  1023. /// <summary>
  1024. /// 获得主功法数量
  1025. /// </summary>
  1026. /// <returns></returns>
  1027. private int GetMainGongFaCount()
  1028. {
  1029. int count = 0;
  1030. for (var i = 0; i < allUseSkill.Length; i++)
  1031. {
  1032. if (allUseSkill[i] != null && allUseSkill[i].skillConfig.SkillType == 1)
  1033. {
  1034. count++;
  1035. }
  1036. }
  1037. return count;
  1038. }
  1039. /// <summary>
  1040. /// 获得被动功法数量
  1041. /// </summary>
  1042. /// <returns></returns>
  1043. private int GetPassiveGongFaCount()
  1044. {
  1045. int count = 0;
  1046. for (var i = 0; i < allUseSkill.Length; i++)
  1047. {
  1048. if (allUseSkill[i] != null && allUseSkill[i].skillConfig.SkillType == 2)
  1049. {
  1050. count++;
  1051. }
  1052. }
  1053. return count;
  1054. }
  1055. private bool IsMainGongFaChange(SkillConfig s)
  1056. {
  1057. if (GetMainGongFaCount() < PlayerManager.Instance.myHero.powerUpConfig.MaxActiveGongfaNum ||
  1058. s.SkillType != 1)
  1059. {
  1060. return true;
  1061. }
  1062. else
  1063. {
  1064. return false;
  1065. }
  1066. }
  1067. private bool IsPassiveGongFaChange(SkillConfig s)
  1068. {
  1069. if (GetPassiveGongFaCount() < PlayerManager.Instance.myHero.powerUpConfig.MaxPassiveGongfaNum ||
  1070. s.SkillType != 2)
  1071. {
  1072. return true;
  1073. }
  1074. else
  1075. {
  1076. return false;
  1077. }
  1078. }
  1079. public void HindIScorllListWidget(IScorllListWidget widget)
  1080. {
  1081. UIManager.Instance.DormancyGComponent(widget as SkillWidget);
  1082. _skillWidgets.Remove(widget as SkillWidget);
  1083. }
  1084. public async override CTask Close()
  1085. {
  1086. foreach (var skillWidget in _skillWidgets)
  1087. {
  1088. UIManager.Instance.DormancyGComponent(skillWidget);
  1089. }
  1090. _skillWidgets.Clear();
  1091. foreach (var skillKongWidget in allKongSkill)
  1092. {
  1093. // UIManager.Instance.DormancyGComponent(skillKongWidget);
  1094. }
  1095. allKongSkill.Clear();
  1096. foreach (var wuXingGongFaWidget in _wuXingGongFaWidgets)
  1097. {
  1098. UIManager.Instance.DormancyGComponent(wuXingGongFaWidget);
  1099. }
  1100. Icon_Select.gameObject.SetActive(false);
  1101. _wuXingGongFaWidgets.Clear();
  1102. CloseSelect();
  1103. // ChangeInfoType(1);
  1104. await base.Close();
  1105. }
  1106. }
  1107. }