SelectElixirPanel.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Excel2Json;
  5. using Fort23.Core;
  6. using Fort23.UTool;
  7. using UnityEngine;
  8. using Transform = UnityEngine.Transform;
  9. namespace Fort23.Mono
  10. {
  11. [UIBinding(prefab = "SelectElixirPanel")]
  12. public partial class SelectElixirPanel : UIPanel
  13. {
  14. List<ElixirItemWidget> elixirItems = new List<ElixirItemWidget>();
  15. private ElixirItemWidget elixirItemWidget;
  16. Action<ElixirItemWidget> callback;
  17. private Transform weidgetFater;
  18. BreakthroughItemWidget breakthrough;
  19. private void Init()
  20. {
  21. isPopUi = true;
  22. isAddStack = false;
  23. }
  24. protected override void AddEvent()
  25. {
  26. }
  27. protected override void DelEvent()
  28. {
  29. }
  30. public override void AddButtonEvent()
  31. {
  32. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  33. Btn_Affirm.onClick.AddListener(() =>
  34. {
  35. // if (elixirItemWidget == null)
  36. // return;
  37. if (elixirItemWidget != null)
  38. {
  39. if (!PlayerManager.Instance.BagController.IsEnough(elixirItemWidget._itemConfig.ID, 1))
  40. {
  41. TipMessagePanel.OpenTipMessagePanel("道具不足!");
  42. return;
  43. }
  44. }
  45. callback?.Invoke(elixirItemWidget);
  46. EventManager.Instance.Dispatch(CustomEventType.RefenceBreakthrough, null);
  47. UIManager.Instance.HideUIUIPanel(this);
  48. });
  49. Btn_Cancel.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  50. }
  51. public async void CustomInit(BreakthroughItemWidget breakthroughItemWidget, Action<ElixirItemWidget> callback)
  52. {
  53. this.callback = callback;
  54. breakthrough = breakthroughItemWidget;
  55. Text_FailDesc.text = $"-{0}%";
  56. Text_SucceedDesc.text = $"+{0}%";
  57. weidgetFater = breakthroughItemWidget.transform.parent;
  58. breakthroughItemWidget.transform.SetParent(this.transform);
  59. breakthroughItemWidget.Icon_Select.gameObject.SetActive(true);
  60. List<ItemConfig> itemConfigs = ConfigComponent.Instance.GetAll<ItemConfig>().ToList();
  61. var showItemConfigs = itemConfigs.Where(i => i.itemTag == 3 && PlayerManager.Instance.myHero.heroData.heroPowerId >= i.associateVlaue[0] && PlayerManager.Instance.myHero.heroData.heroPowerId <= i.associateVlaue[1]).ToList();
  62. foreach (var showItemConfig in showItemConfigs)
  63. {
  64. ElixirItemWidget elixirItemWidget = await UIManager.Instance.CreateGComponent<ElixirItemWidget>(null, Content);
  65. elixirItemWidget.CustomInit(showItemConfig.ID);
  66. if (breakthroughItemWidget.itemInfo != null)
  67. {
  68. if (breakthroughItemWidget.itemInfo.config.ID == showItemConfig.ID)
  69. {
  70. this.elixirItemWidget = elixirItemWidget;
  71. }
  72. }
  73. elixirItemWidget.OnClick = OnClick;
  74. elixirItems.Add(elixirItemWidget);
  75. }
  76. SelectWidget(elixirItemWidget);
  77. RefenceBl();
  78. }
  79. private void OnClick(ItemWidgetBasic obj)
  80. {
  81. ElixirItemWidget elixirItemWidget = obj as ElixirItemWidget;
  82. if (elixirItemWidget == this.elixirItemWidget)
  83. {
  84. this.elixirItemWidget = null;
  85. SelectWidget(null);
  86. }
  87. else
  88. {
  89. this.elixirItemWidget = elixirItemWidget;
  90. SelectWidget(elixirItemWidget);
  91. }
  92. RefenceBl();
  93. }
  94. private void SelectWidget(ElixirItemWidget elixirItemWidget)
  95. {
  96. if (elixirItemWidget == null)
  97. {
  98. Icon_Select.transform.SetParent(transform);
  99. Icon_Select.SetActive(false);
  100. }
  101. else
  102. {
  103. Icon_Select.transform.SetParent(elixirItemWidget.SelectRoot);
  104. Icon_Select.GetComponent<RectTransform>().anchoredPosition = new Vector2(-0.48f, 6.1f);
  105. Icon_Select.SetActive(true);
  106. }
  107. }
  108. private void RefenceBl()
  109. {
  110. if (elixirItemWidget == null)
  111. {
  112. Text_SucceedDesc.text = $"+{0}%";
  113. Text_FailDesc.text = $"-{0}%";
  114. }
  115. else
  116. {
  117. Text_SucceedDesc.text = $"+{elixirItemWidget._itemConfig.associateVlaue[2]}%";
  118. Text_FailDesc.text = $"-{elixirItemWidget._itemConfig.associateVlaue[3]}%";
  119. }
  120. }
  121. public override void Close()
  122. {
  123. elixirItems.ForEach(e => UIManager.Instance.DormancyGComponent(e));
  124. elixirItems.Clear();
  125. elixirItemWidget = null;
  126. breakthrough.transform.SetParent(weidgetFater);
  127. breakthrough.Icon_Select.gameObject.SetActive(false);
  128. breakthrough = null;
  129. weidgetFater = null;
  130. SelectWidget(null);
  131. base.Close();
  132. }
  133. public async static CTask<SelectElixirPanel> OpenPanel(BreakthroughItemWidget itemInfo, Action<ElixirItemWidget> callback = null)
  134. {
  135. SelectElixirPanel selectElixirPanel = await UIManager.Instance.LoadAndOpenPanel<SelectElixirPanel>(null, UILayer.Top, isFocus: false);
  136. selectElixirPanel.CustomInit(itemInfo, callback);
  137. return selectElixirPanel;
  138. }
  139. }
  140. }