GongFaUpgradePanel.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Core.Language;
  4. using Excel2Json;
  5. using Fort23.Core;
  6. using Fort23.UTool;
  7. using GameLogic.Hero;
  8. using GameLogic.Player;
  9. using UnityEngine;
  10. using UnityEngine.UI;
  11. using Utility;
  12. namespace Fort23.Mono
  13. {
  14. [UIBinding(prefab = "GongFaUpgradePanel")]
  15. public partial class GongFaUpgradePanel : UIPanel
  16. {
  17. private SkillInfo _skillInfo;
  18. private List<SkillConfig> configs;
  19. List<GongFaUpgradeInfoWidget> _gongFaUpgradeInfoWidgets = new List<GongFaUpgradeInfoWidget>();
  20. private List<SkillPowerupConfig> _skillPowerupConfigs;
  21. private SkillConstant skillConstant;
  22. List<ItemWidgetType1> _itemWidgetType1 = new List<ItemWidgetType1>();
  23. List<EnergyWidget> _energyWidgets = new List<EnergyWidget>();
  24. bool isUpStar = false;
  25. bool isUpGrad = false;
  26. private void Init()
  27. {
  28. isAddStack = true;
  29. IsShowAppBar = false;
  30. }
  31. public async override CTask GetFocus()
  32. {
  33. // await AppBarPanel.OpenPanel(this);
  34. base.GetFocus();
  35. }
  36. protected override void AddEvent()
  37. {
  38. }
  39. protected override void DelEvent()
  40. {
  41. }
  42. public override void AddButtonEvent()
  43. {
  44. Btn_Back.onClick.AddListener(() =>
  45. {
  46. if (isUpStar || isUpGrad)
  47. {
  48. isUpStar = false;
  49. isUpGrad = false;
  50. UpdateStarBtn();
  51. return;
  52. }
  53. UIManager.Instance.HideUIUIPanel<GongFaUpgradePanel>();
  54. });
  55. Btn_UpGrade.onClick.AddListener(() =>
  56. {
  57. if (_skillInfo.SkillData == null)
  58. {
  59. return;
  60. }
  61. if (!isUpGrad)
  62. {
  63. isUpGrad = true;
  64. UpdateStarBtn();
  65. return;
  66. }
  67. if (_skillInfo.SkillData.level >= _skillPowerupConfigs.Count)
  68. {
  69. TipMessagePanel.OpenTipMessagePanel("已经满级!");
  70. return;
  71. }
  72. if (PlayerManager.Instance.myHero.level.Value < _skillInfo.SkillPowerupConfig.PlayerLevelLimit)
  73. {
  74. HeroPowerUpConfig heroPowerUpConfig = ConfigComponent.Instance.Get<HeroPowerUpConfig>(_skillInfo.SkillPowerupConfig.PlayerLevelLimit);
  75. TipMessagePanel.OpenTipMessagePanel($"需境界达到{LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2])}");
  76. return;
  77. }
  78. for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++)
  79. {
  80. if (!PlayerManager.Instance.BagController.IsEnough(_skillInfo.SkillPowerupConfig.LevelupItem[i], _skillInfo.SkillPowerupConfig.LevelupItemNum[i]))
  81. {
  82. TipMessagePanel.OpenTipMessagePanel("道具不足!");
  83. return;
  84. }
  85. }
  86. for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++)
  87. {
  88. if (!PlayerManager.Instance.BagController.DeductItem(_skillInfo.SkillPowerupConfig.LevelupItem[i], _skillInfo.SkillPowerupConfig.LevelupItemNum[i]))
  89. {
  90. TipMessagePanel.OpenTipMessagePanel("道具不足!");
  91. return;
  92. }
  93. }
  94. _skillInfo.SkillData.level++;
  95. _skillInfo.CustomInt(_skillInfo.SkillData);
  96. CustomInit(_skillInfo);
  97. AccountFileInfo.Instance.SavePlayerData();
  98. });
  99. Btn_UpStar.onClick.AddListener(() =>
  100. {
  101. if (!isUpStar)
  102. {
  103. isUpStar = true;
  104. UpdateStarBtn();
  105. return;
  106. }
  107. if (_skillInfo.SkillData == null)
  108. {
  109. return;
  110. }
  111. if (_skillInfo.SkillData.star > _gongFaUpgradeInfoWidgets.Count)
  112. {
  113. TipMessagePanel.OpenTipMessagePanel("已经满星!");
  114. return;
  115. }
  116. int count = skillConstant.SkillPromoteNeedPieceNum[_skillInfo.skillConfig.level];
  117. if (!PlayerManager.Instance.BagController.DeductItem(_skillInfo.skillConfig.PieceID, count))
  118. {
  119. TipMessagePanel.OpenTipMessagePanel("道具不足!");
  120. return;
  121. }
  122. _skillInfo.SkillData.star++;
  123. _skillInfo.CustomInt(_skillInfo.SkillData);
  124. CustomInit(_skillInfo);
  125. AccountFileInfo.Instance.SavePlayerData();
  126. });
  127. }
  128. public async void CustomInit(SkillInfo skillInfo)
  129. {
  130. foreach (var gongFaUpgradeInfoWidget in _gongFaUpgradeInfoWidgets)
  131. {
  132. UIManager.Instance.DormancyGComponent(gongFaUpgradeInfoWidget);
  133. }
  134. _gongFaUpgradeInfoWidgets.Clear();
  135. _skillInfo = skillInfo;
  136. _skillPowerupConfigs = ConfigComponent.Instance.GetAll<SkillPowerupConfig>().ToList();
  137. SkillConfig skillConfig = _skillInfo.skillConfig;
  138. Icon_GongFaIcon.icon_name = skillConfig.icon;
  139. Text_Level1.text = "Lv." + _skillInfo.SkillPowerupConfig.ID.ToString();
  140. Text_Level.text = "Lv." + _skillInfo.SkillPowerupConfig.ID.ToString();
  141. Text_SkillCd.text = $"加功法盘速度:{skillConfig.addcd}秒";
  142. skillConstant = ConfigComponent.Instance.Get<SkillConstant>(1);
  143. UpdateStarBtn();
  144. Text_GongFaDesc.text = UtilTools.GetString(LanguageManager.Instance.Text(skillConfig.dec), _skillInfo.effectValue);
  145. Text_GongFaName.text = LanguageManager.Instance.Text(skillConfig.name) + " ";
  146. LayoutRebuilder.ForceRebuildLayoutImmediate(Text_GongFaName.GetComponent<RectTransform>());
  147. LayoutRebuilder.ForceRebuildLayoutImmediate(Text_Level.GetComponent<RectTransform>());
  148. LayoutRebuilder.ForceRebuildLayoutImmediate(Text_GongFaName.transform.parent.GetComponent<RectTransform>());
  149. switch (skillConfig.attribute)
  150. {
  151. case 1:
  152. Icon_Attribute.icon_name = "dec_jin2";
  153. break;
  154. case 2:
  155. Icon_Attribute.icon_name = "dec_mu2";
  156. break;
  157. case 4:
  158. Icon_Attribute.icon_name = "dec_shui2";
  159. break;
  160. case 8:
  161. Icon_Attribute.icon_name = "dec_huo2";
  162. break;
  163. case 16:
  164. Icon_Attribute.icon_name = "dec_tu2";
  165. break;
  166. }
  167. for (var i = 0; i < StarRoot.Count; i++)
  168. {
  169. MyImage icon = StarRoot[i] as MyImage;
  170. if (i < skillInfo.skillConfig.level - 1)
  171. {
  172. icon.gameObject.SetActive(true);
  173. }
  174. else
  175. {
  176. icon.gameObject.SetActive(false);
  177. }
  178. }
  179. // for (var i = 0; i < StarRoot.Count; i++)
  180. // {
  181. // MyImage myImage = StarRoot[i] as MyImage;
  182. // myImage.gameObject.SetActive(false);
  183. // }
  184. //
  185. // int yinstar = skillInfo.skillConfig.level - 5;
  186. // for (var i = 0; i < StarRoot.Count; i++)
  187. // {
  188. // MyImage icon = StarRoot[i] as MyImage;
  189. // if (skillInfo.skillConfig.level > 5)
  190. // {
  191. // if (i < yinstar)
  192. // {
  193. // icon.icon_name = "dec_star_2";
  194. // icon.gameObject.SetActive(true);
  195. // }
  196. // else
  197. // {
  198. // icon.icon_name = "dec_gfxingji";
  199. // icon.gameObject.SetActive(true);
  200. // }
  201. // }
  202. // else
  203. // {
  204. // if (i < skillInfo.skillConfig.level)
  205. // {
  206. // icon.icon_name = "dec_gfxingji";
  207. // icon.gameObject.SetActive(true);
  208. // }
  209. // }
  210. // }
  211. List<SkillConfig> allSkillConfigs = ConfigComponent.Instance.GetAll<SkillConfig>().ToList();
  212. configs = allSkillConfigs.Where(s => s.IDGroup == skillConfig.IDGroup).ToList();
  213. for (var i = 0; i < configs.Count; i++)
  214. {
  215. if (configs[i].level == 1)
  216. continue;
  217. SkillInfo skillInfo1 = new SkillInfo(configs[i].IDGroup, _skillInfo.SkillPowerupConfig.ID, configs[i].level);
  218. GongFaUpgradeInfoWidget gongFaUpgradeInfoWidget = await UIManager.Instance.CreateGComponent<GongFaUpgradeInfoWidget>(null, Content);
  219. gongFaUpgradeInfoWidget.CustomInit(_skillInfo, skillInfo1, false);
  220. _gongFaUpgradeInfoWidgets.Add(gongFaUpgradeInfoWidget);
  221. }
  222. }
  223. private async CTask UpdateStarBtn()
  224. {
  225. foreach (var itemWidgetType1 in _itemWidgetType1)
  226. {
  227. UIManager.Instance.DormancyGComponent(itemWidgetType1);
  228. }
  229. _itemWidgetType1.Clear();
  230. foreach (var energyWidget in _energyWidgets)
  231. {
  232. UIManager.Instance.DormancyGComponent(energyWidget);
  233. }
  234. _energyWidgets.Clear();
  235. if (isUpGrad)
  236. {
  237. if (_skillInfo.SkillData.level < _skillPowerupConfigs.Count)
  238. {
  239. AccountFileInfo.SkillData skillData = new AccountFileInfo.SkillData();
  240. skillData.id = _skillInfo.SkillData.id;
  241. skillData.level = _skillInfo.SkillData.level + 1;
  242. skillData.star = _skillInfo.SkillData.star;
  243. SkillInfo nextSkillInfo = new SkillInfo(skillData);
  244. string[] effs = new string[_skillInfo.effectValue.Length];
  245. for (var i = 0; i < _skillInfo.effectValue.Length; i++)
  246. {
  247. if (_skillInfo.effectValue[i] == nextSkillInfo.effectValue[i])
  248. {
  249. effs[i] = _skillInfo.effectValue[i].ToString();
  250. }
  251. else
  252. {
  253. effs[i] = $"{_skillInfo.effectValue[i].ToString()}<color=green>→({nextSkillInfo.effectValue[i]})</color>";
  254. }
  255. }
  256. Text_NextLevel.gameObject.SetActive(true);
  257. Text_NextLevel.text = $"{_skillInfo.skillConfig.level}级 → {nextSkillInfo.skillConfig.level}级";
  258. Text_GongFaDesc.text = UtilTools.GetString(LanguageManager.Instance.Text(_skillInfo.skillConfig.dec), effs);
  259. Btn_UpStar.gameObject.SetActive(false);
  260. if (PlayerManager.Instance.myHero.level.Value < _skillInfo.SkillPowerupConfig.PlayerLevelLimit)
  261. {
  262. HeroPowerUpConfig heroPowerUpConfig = ConfigComponent.Instance.Get<HeroPowerUpConfig>(_skillInfo.SkillPowerupConfig.PlayerLevelLimit);
  263. Text_UpGrade.text = $"需境界达到{LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2])}";
  264. Btn_UpGrade.gameObject.transform.Gray(true);
  265. UpGradeItemRoot.SetActive(false);
  266. }
  267. else
  268. {
  269. Btn_UpGrade.gameObject.transform.RecoverColor();
  270. Text_UpGrade.text = "升级";
  271. UpGradeItemRoot.SetActive(true);
  272. for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++)
  273. {
  274. ItemWidgetType1 itemWidgetType1 = await UIManager.Instance.CreateGComponentForObject<ItemWidgetType1>(ItemWidgetType1Gam, null, UpGradeItemRoot.GetComponent<RectTransform>(), isInstance: true);
  275. itemWidgetType1.CustomInit(_skillInfo.SkillPowerupConfig.LevelupItem[i], _skillInfo.SkillPowerupConfig.LevelupItemNum[i]);
  276. _itemWidgetType1.Add(itemWidgetType1);
  277. EnergyWidget energyWidget =
  278. await UIManager.Instance.CreateGComponent<EnergyWidget>(null, EnergyRoot);
  279. energyWidget.CustomInit(_skillInfo.SkillPowerupConfig.LevelupItem[i]);
  280. _energyWidgets.Add(energyWidget);
  281. }
  282. Text_GongFaDesc.text = UtilTools.GetString(LanguageManager.Instance.Text(_skillInfo.skillConfig.dec), _skillInfo.effectValue);
  283. }
  284. }
  285. else
  286. {
  287. Text_NextLevel.gameObject.SetActive(true);
  288. Text_NextLevel.text = $"{_skillInfo.skillConfig.level}级 → Max级";
  289. Text_UpGrade.text = "已满级";
  290. Btn_UpStar.gameObject.SetActive(false);
  291. UpGradeItemRoot.SetActive(false);
  292. }
  293. }
  294. if (isUpStar)
  295. {
  296. foreach (var gongFaUpgradeInfoWidget in _gongFaUpgradeInfoWidgets)
  297. {
  298. gongFaUpgradeInfoWidget.SelectWidget(true);
  299. }
  300. if (_skillInfo.skillConfig.level < 6)
  301. {
  302. Btn_UpStar.gameObject.transform.RecoverColor();
  303. Text_UpStar.text = "领悟";
  304. Btn_UpGrade.gameObject.SetActive(false);
  305. UpStarItemRoot.SetActive(true);
  306. int count = skillConstant.SkillPromoteNeedPieceNum[_skillInfo.skillConfig.level];
  307. ItemWidgetType1 itemWidgetType1 = await UIManager.Instance.CreateGComponentForObject<ItemWidgetType1>(ItemWidgetType1Gam, null, UpStarItemRoot.GetComponent<RectTransform>(), isInstance: true);
  308. itemWidgetType1.CustomInit(_skillInfo.skillConfig.PieceID, count);
  309. _itemWidgetType1.Add(itemWidgetType1);
  310. EnergyWidget energyWidget =
  311. await UIManager.Instance.CreateGComponent<EnergyWidget>(null, EnergyRoot);
  312. energyWidget.CustomInit(_skillInfo.skillConfig.PieceID);
  313. _energyWidgets.Add(energyWidget);
  314. }
  315. else
  316. {
  317. Text_UpStar.text = "已满星";
  318. Btn_UpGrade.gameObject.SetActive(false);
  319. UpStarItemRoot.SetActive(false);
  320. }
  321. }
  322. if (!isUpGrad && !isUpStar)
  323. {
  324. Btn_UpGrade.gameObject.SetActive(true);
  325. Btn_UpStar.gameObject.SetActive(true);
  326. UpStarItemRoot.SetActive(false);
  327. UpGradeItemRoot.SetActive(false);
  328. Text_UpStar.text = "领悟";
  329. Text_UpGrade.text = "升级";
  330. Btn_UpGrade.gameObject.transform.RecoverColor();
  331. foreach (var gongFaUpgradeInfoWidget in _gongFaUpgradeInfoWidgets)
  332. {
  333. gongFaUpgradeInfoWidget.SelectWidget(false);
  334. }
  335. Text_NextLevel.gameObject.SetActive(false);
  336. Text_GongFaDesc.text = UtilTools.GetString(LanguageManager.Instance.Text(_skillInfo.skillConfig.dec), _skillInfo.effectValue);
  337. }
  338. LayoutRebuilder.ForceRebuildLayoutImmediate(UpStarItemRoot.GetComponent<RectTransform>());
  339. LayoutRebuilder.ForceRebuildLayoutImmediate(UpGradeItemRoot.GetComponent<RectTransform>());
  340. LayoutRebuilder.ForceRebuildLayoutImmediate(Text_UpStar.GetComponent<RectTransform>());
  341. LayoutRebuilder.ForceRebuildLayoutImmediate(Text_UpGrade.GetComponent<RectTransform>());
  342. LayoutRebuilder.ForceRebuildLayoutImmediate(UpGradeItemRoot.transform.parent.GetComponent<RectTransform>());
  343. LayoutRebuilder.ForceRebuildLayoutImmediate(UpStarItemRoot.transform.parent.GetComponent<RectTransform>());
  344. LayoutRebuilder.ForceRebuildLayoutImmediate(Btn_UpGrade.GetComponent<RectTransform>());
  345. }
  346. public async static CTask<GongFaUpgradePanel> Open(SkillInfo skillInfo)
  347. {
  348. GongFaUpgradePanel gongFaUpgradePanel = await UIManager.Instance.LoadAndOpenPanel<GongFaUpgradePanel>(null);
  349. gongFaUpgradePanel.CustomInit(skillInfo);
  350. return gongFaUpgradePanel;
  351. }
  352. public override void Close()
  353. {
  354. foreach (var gongFaUpgradeInfoWidget in _gongFaUpgradeInfoWidgets)
  355. {
  356. UIManager.Instance.DormancyGComponent(gongFaUpgradeInfoWidget);
  357. }
  358. foreach (var itemWidgetType1 in _itemWidgetType1)
  359. {
  360. UIManager.Instance.DormancyGComponent(itemWidgetType1);
  361. }
  362. foreach (var energyWidget in _energyWidgets)
  363. {
  364. UIManager.Instance.DormancyGComponent(energyWidget);
  365. }
  366. _energyWidgets.Clear();
  367. _itemWidgetType1.Clear();
  368. _gongFaUpgradeInfoWidgets.Clear();
  369. isUpStar = false;
  370. isUpGrad = false;
  371. _skillInfo = null;
  372. base.Close();
  373. }
  374. }
  375. }