GiftBoxSelectorView.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. using System;
  2. using System.Collections.Generic;
  3. using ET;
  4. using FairyGUI;
  5. using UI.Bag;
  6. using UI.CommonGame;
  7. using UnityEngine;
  8. namespace GFGGame
  9. {
  10. public class GiftBoxSelectorView : BaseWindow
  11. {
  12. private UI_GiftBoxSelectorUI _ui;
  13. private int _itemId;
  14. private int _count; //物品数量
  15. private int _selCount; //选择的数量
  16. private Dictionary<int, int> _selDic; //选择礼包内的物品<物品id,数量>
  17. public override void Dispose()
  18. {
  19. base.Dispose();
  20. if (_selDic != null)
  21. {
  22. _selDic.Clear();
  23. _selDic = null;
  24. }
  25. if (_ui != null)
  26. {
  27. _ui.Dispose();
  28. _ui = null;
  29. }
  30. }
  31. protected override void OnInit()
  32. {
  33. base.OnInit();
  34. packageName = UI_GiftBoxSelectorUI.PACKAGE_NAME;
  35. _ui = UI_GiftBoxSelectorUI.Create();
  36. this.viewCom = _ui.target;
  37. this.viewCom.Center();
  38. this.modal = true;
  39. _selDic = new Dictionary<int, int>();
  40. _ui.m_btnCancel.onClick.Add(OnBtnCancelClick);
  41. _ui.m_list.itemRenderer = ListItemRender;
  42. _ui.m_btnSub.onClick.Add(OnBtnSubClick);
  43. }
  44. protected override void AddEventListener()
  45. {
  46. base.AddEventListener();
  47. }
  48. protected override void OnShown()
  49. {
  50. base.OnShown();
  51. _itemId = (int)this.viewData;
  52. _count = (int)ItemDataManager.GetItemNum(_itemId);
  53. _selDic.Clear();
  54. _selCount = 0;
  55. UpdateView();
  56. UpdateList();
  57. SetSelAllNum();
  58. }
  59. protected override void OnHide()
  60. {
  61. if (_ui.m_list.numItems > 0)
  62. {
  63. _ui.m_list.ScrollToView(0);
  64. }
  65. _ui.m_list.numItems = 0;
  66. _selDic.Clear();
  67. _selCount = 0;
  68. base.OnHide();
  69. }
  70. protected override void RemoveEventListener()
  71. {
  72. base.RemoveEventListener();
  73. }
  74. private void UpdateView()
  75. {
  76. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId);
  77. _ui.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg);
  78. _ui.m_txtName.text = itemCfg.name;
  79. _ui.m_txtTotalNum.text = $"已拥有:{_count}";
  80. _ui.m_txtItemDes.text = string.IsNullOrEmpty(itemCfg.desc) ? "暂无描述" : itemCfg.desc;
  81. }
  82. private void UpdateList()
  83. {
  84. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId);
  85. _ui.m_list.numItems = itemCfg.itemsArr.Length;
  86. _ui.m_list.visible = true;
  87. }
  88. private void ListItemRender(int index, GObject obj)
  89. {
  90. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId);
  91. UI_ListSelectorItem uiItemChild = UI_ListSelectorItem.Proxy(obj);
  92. int[] itemChildArr = itemCfg.itemsArr[index];
  93. ItemCfg itemCfgChild = ItemCfgArray.Instance.GetCfg(itemChildArr[0]);
  94. uiItemChild.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfgChild);
  95. uiItemChild.m_loaIcon.onClick.Add(OnListSelectorItemClick);
  96. uiItemChild.m_comItemNumBag.m_txtNum.text = itemChildArr[1].ToString();
  97. uiItemChild.m_txtSelNum.text = "0";
  98. uiItemChild.m_btnAdd.onClick.Add(OnChildBtnAddClick);
  99. uiItemChild.m_btnReduce.onClick.Add(OnChildBtnReduceClick);
  100. uiItemChild.target.data = itemCfgChild;
  101. UI_ListSelectorItem.ProxyEnd();
  102. }
  103. private void OnChildBtnAddClick(EventContext context)
  104. {
  105. GObject sender = context.sender as GObject;
  106. GObject obj = sender.parent;
  107. UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj);
  108. if (_selCount == _count)
  109. {
  110. return;
  111. }
  112. if (listItem.m_txtSelNum.text == _count.ToString())
  113. {
  114. return;
  115. }
  116. ItemCfg itemCfg = obj.data as ItemCfg;
  117. if (_selDic.TryGetValue(itemCfg.id, out int num))
  118. {
  119. if (num == _count)
  120. {
  121. return;
  122. }
  123. _selCount += 1;
  124. _selDic[itemCfg.id] = num + 1;
  125. listItem.m_txtSelNum.text = Convert.ToString(Convert.ToInt32(listItem.m_txtSelNum.text) + 1);
  126. }
  127. else
  128. {
  129. _selDic.Add(itemCfg.id, 1);
  130. _selCount += 1;
  131. listItem.m_txtSelNum.text = Convert.ToString(1);
  132. }
  133. SetSelAllNum();
  134. }
  135. private void SetSelAllNum()
  136. {
  137. _ui.m_txtSelRewardStr.text = $"已选奖励:{_selCount}/{_count}";
  138. }
  139. private void OnChildBtnReduceClick(EventContext context)
  140. {
  141. GObject sender = context.sender as GObject;
  142. GObject obj = sender.parent;
  143. UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj);
  144. if (_selCount == 0)
  145. {
  146. return;
  147. }
  148. if (listItem.m_txtSelNum.text == "0")
  149. {
  150. return;
  151. }
  152. ItemCfg itemCfg = obj.data as ItemCfg;
  153. if (_selDic.TryGetValue(itemCfg.id, out int num))
  154. {
  155. if (num == 0)
  156. {
  157. return;
  158. }
  159. _selCount -= 1;
  160. _selDic[itemCfg.id] = num - 1;
  161. listItem.m_txtSelNum.text = Convert.ToString(Convert.ToInt32(listItem.m_txtSelNum.text) - 1);
  162. }
  163. else
  164. {
  165. _selCount -= 1;
  166. _selDic.Add(itemCfg.id, 0);
  167. listItem.m_txtSelNum.text = Convert.ToString(0);
  168. }
  169. SetSelAllNum();
  170. }
  171. //弹出物品详细描述框
  172. private void OnListSelectorItemClick(EventContext context)
  173. {
  174. GObject sender = context.sender as GObject;
  175. GObject obj = sender.parent;
  176. ItemCfg itemCfg = obj.data as ItemCfg;
  177. GoodsItemTipsController.ShowItemTips(itemCfg.id);
  178. }
  179. private void OnBtnCancelClick()
  180. {
  181. this.Hide();
  182. }
  183. //确认按钮
  184. private void OnBtnSubClick()
  185. {
  186. List<GiftBoxSelChildItemProto> reqItemList = new List<GiftBoxSelChildItemProto>();
  187. foreach (var itemKv in _selDic)
  188. {
  189. reqItemList.Add(new GiftBoxSelChildItemProto
  190. {
  191. ChildItemId = itemKv.Key,
  192. ChildItemCount = itemKv.Value
  193. });
  194. }
  195. ItemProxy.ReqUseGiftBoxSelItem(_itemId, reqItemList).Coroutine();
  196. this.Hide();
  197. }
  198. }
  199. }