SelectElixirPanel.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. IsShowAppBar = false;
  22. isAddStack = true;
  23. }
  24. protected override void AddEvent()
  25. {
  26. EventManager.Instance.AddEventListener(CustomEventType.ItemUpdate, ItemUpdateEvent);
  27. }
  28. private void ItemUpdateEvent(IEventData e)
  29. {
  30. CustomInit(breakthrough, callback);
  31. }
  32. protected override void DelEvent()
  33. {
  34. EventManager.Instance.RemoveEventListener(CustomEventType.ItemUpdate, ItemUpdateEvent);
  35. }
  36. public override void AddButtonEvent()
  37. {
  38. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  39. Btn_Affirm.onClick.AddListener(() =>
  40. {
  41. // if (elixirItemWidget == null)
  42. // return;
  43. if (elixirItemWidget != null)
  44. {
  45. if (!PlayerManager.Instance.BagController.IsEnough(elixirItemWidget._itemConfig.ID, 1))
  46. {
  47. TipMessagePanel.OpenTipMessagePanel("道具不足!");
  48. return;
  49. }
  50. }
  51. callback?.Invoke(elixirItemWidget);
  52. EventManager.Instance.Dispatch(CustomEventType.RefenceBreakthrough, null);
  53. UIManager.Instance.HideUIUIPanel(this);
  54. });
  55. Btn_Cancel.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  56. }
  57. public async void CustomInit(BreakthroughItemWidget breakthroughItemWidget, Action<ElixirItemWidget> callback)
  58. {
  59. this.callback = callback;
  60. breakthrough = breakthroughItemWidget;
  61. Text_FailDesc.text = $"-{0}%";
  62. Text_SucceedDesc.text = $"+{0}%";
  63. weidgetFater = breakthroughItemWidget.transform.parent;
  64. breakthroughItemWidget.transform.SetParent(this.transform);
  65. breakthroughItemWidget.Icon_Select.gameObject.SetActive(true);
  66. List<ItemConfig> itemConfigs = ConfigComponent.Instance.GetAll<ItemConfig>().ToList();
  67. 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();
  68. foreach (var showItemConfig in showItemConfigs)
  69. {
  70. ElixirItemWidget elixirItemWidget = await UIManager.Instance.CreateGComponent<ElixirItemWidget>(null, Content);
  71. elixirItemWidget.CustomInit(showItemConfig.ID);
  72. if (breakthroughItemWidget.itemInfo != null)
  73. {
  74. if (breakthroughItemWidget.itemInfo.config.ID == showItemConfig.ID)
  75. {
  76. this.elixirItemWidget = elixirItemWidget;
  77. }
  78. }
  79. elixirItemWidget.OnClick = OnClick;
  80. elixirItems.Add(elixirItemWidget);
  81. }
  82. SelectWidget(elixirItemWidget);
  83. RefenceBl();
  84. }
  85. private void OnClick(ItemWidgetBasic obj)
  86. {
  87. ElixirItemWidget elixirItemWidget = obj as ElixirItemWidget;
  88. if (!PlayerManager.Instance.BagController.IsEnough(elixirItemWidget._itemConfig.ID, 1))
  89. {
  90. ItemSourcePanel.OpenPanel(elixirItemWidget._itemConfig.ID);
  91. return;
  92. }
  93. if (elixirItemWidget == this.elixirItemWidget)
  94. {
  95. this.elixirItemWidget = null;
  96. SelectWidget(null);
  97. }
  98. else
  99. {
  100. this.elixirItemWidget = elixirItemWidget;
  101. SelectWidget(elixirItemWidget);
  102. }
  103. RefenceBl();
  104. }
  105. private void SelectWidget(ElixirItemWidget elixirItemWidget)
  106. {
  107. if (elixirItemWidget == null)
  108. {
  109. Icon_Select.transform.SetParent(transform);
  110. Icon_Select.SetActive(false);
  111. }
  112. else
  113. {
  114. Icon_Select.transform.SetParent(elixirItemWidget.SelectRoot);
  115. Icon_Select.GetComponent<RectTransform>().anchoredPosition = new Vector2(-0.48f, 6.1f);
  116. Icon_Select.SetActive(true);
  117. }
  118. }
  119. private void RefenceBl()
  120. {
  121. if (elixirItemWidget == null)
  122. {
  123. Text_SucceedDesc.text = $"+{0}%";
  124. Text_FailDesc.text = $"-{0}%";
  125. }
  126. else
  127. {
  128. Text_SucceedDesc.text = $"+{elixirItemWidget._itemConfig.associateVlaue[2]}%";
  129. Text_FailDesc.text = $"-{elixirItemWidget._itemConfig.associateVlaue[3]}%";
  130. }
  131. }
  132. public async override CTask Close()
  133. {
  134. elixirItems.ForEach(e => UIManager.Instance.DormancyGComponent(e));
  135. elixirItems.Clear();
  136. elixirItemWidget = null;
  137. breakthrough.transform.SetParent(weidgetFater);
  138. breakthrough.Icon_Select.gameObject.SetActive(false);
  139. breakthrough = null;
  140. weidgetFater = null;
  141. SelectWidget(null);
  142. await base.Close();
  143. }
  144. public async static CTask<SelectElixirPanel> OpenPanel(BreakthroughItemWidget itemInfo, Action<ElixirItemWidget> callback = null)
  145. {
  146. SelectElixirPanel selectElixirPanel = await UIManager.Instance.LoadAndOpenPanel<SelectElixirPanel>(null, UILayer.Middle, isFocus: false);
  147. selectElixirPanel.CustomInit(itemInfo, callback);
  148. return selectElixirPanel;
  149. }
  150. }
  151. }