using System; using System.Collections.Generic; using ET; using FairyGUI; using UI.Bag; using UI.CommonGame; using UnityEngine; namespace GFGGame { public class GiftBoxSelectorView : BaseWindow { private UI_GiftBoxSelectorUI _ui; private int _itemId; private int _count; //物品数量 private int _selCount; //选择的数量 private Dictionary _selDic; //选择礼包内的物品<物品id,数量> private List _listLongPress = new List(); public override void Dispose() { if (_selDic != null) { _selDic.Clear(); _selDic = null; } for (int i = 0; i < _listLongPress.Count; i++) { _listLongPress[i].Dispose(); } _listLongPress.Clear(); if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_GiftBoxSelectorUI.PACKAGE_NAME; _ui = UI_GiftBoxSelectorUI.Create(); this.viewCom = _ui.target; this.viewCom.Center(); this.modal = true; _selDic = new Dictionary(); _ui.m_btnCancel.onClick.Add(OnBtnCancelClick); _ui.m_list.itemRenderer = ListItemRender; _ui.m_btnSub.onClick.Add(OnBtnSubClick); } protected override void AddEventListener() { base.AddEventListener(); } protected override void OnShown() { base.OnShown(); _itemId = (int)this.viewData; _count = (int)ItemDataManager.GetItemNum(_itemId); _selDic.Clear(); _selCount = 0; UpdateView(); UpdateList(); SetSelAllNum(); } protected override void OnHide() { if (_ui.m_list.numItems > 0) { _ui.m_list.ScrollToView(0); } _ui.m_list.numItems = 0; _selDic.Clear(); _selCount = 0; base.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); } private void UpdateView() { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId); _ui.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg); _ui.m_txtName.text = itemCfg.name; _ui.m_txtTotalNum.text = $"已拥有:{_count}"; _ui.m_txtItemDes.text = string.IsNullOrEmpty(itemCfg.desc) ? "暂无描述" : itemCfg.desc; } private void UpdateList() { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId); _ui.m_list.numItems = itemCfg.itemsArr.Length; _ui.m_list.visible = true; } private void ListItemRender(int index, GObject obj) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId); UI_ListSelectorItem uiItemChild = UI_ListSelectorItem.Proxy(obj); int[] itemChildArr = itemCfg.itemsArr[index]; ItemCfg itemCfgChild = ItemCfgArray.Instance.GetCfg(itemChildArr[0]); uiItemChild.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfgChild); uiItemChild.m_loaIcon.onClick.Add(OnListSelectorItemClick); uiItemChild.m_txtNum.text = itemChildArr[1].ToString(); uiItemChild.m_txtSelNum.text = "0"; uiItemChild.m_btnAdd.onClick.Add(OnBtnAddClick); uiItemChild.m_btnReduce.onClick.Add(OnChildBtnReduceClick); if (uiItemChild.target.data == null) { LongPressGesture longPressGesture = new LongPressGesture(uiItemChild.m_btnAdd); longPressGesture.trigger = 0.3f; longPressGesture.interval = 0.1f; longPressGesture.once = false; longPressGesture.onAction.Add(OnLongPress); _listLongPress.Add(longPressGesture); LongPressGesture longPressGesture2 = new LongPressGesture(uiItemChild.m_btnReduce); longPressGesture2.trigger = 0.3f; longPressGesture2.interval = 0.1f; longPressGesture2.once = false; longPressGesture2.onAction.Add(OnLongPressReduce); _listLongPress.Add(longPressGesture); } uiItemChild.target.data = itemCfgChild; UI_ListSelectorItem.ProxyEnd(); } private void OnBtnAddClick(EventContext context) { GObject sender = context.sender as GObject; GObject obj = sender.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); ItemCfg itemCfg = obj.data as ItemCfg; UpdateSel(listItem, itemCfg); } private void OnLongPress(EventContext context) { LongPressGesture gesture = (LongPressGesture)context.sender; var host = gesture.host; GObject obj = host.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); ItemCfg itemCfg = obj.data as ItemCfg; UpdateSel(listItem, itemCfg); } private void UpdateSel(UI_ListSelectorItem listItem, ItemCfg itemCfg) { if (_selCount == _count) { return; } if (listItem.m_txtSelNum.text == _count.ToString()) { return; } if (_selDic.TryGetValue(itemCfg.id, out int num)) { if (num == _count) { return; } _selCount += 1; _selDic[itemCfg.id] = num + 1; listItem.m_txtSelNum.text = Convert.ToString(Convert.ToInt32(listItem.m_txtSelNum.text) + 1); } else { _selDic.Add(itemCfg.id, 1); _selCount += 1; listItem.m_txtSelNum.text = Convert.ToString(1); } SetSelAllNum(); } private void OnChildBtnReduceClick(EventContext context) { GObject sender = context.sender as GObject; GObject obj = sender.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); ItemCfg itemCfg = obj.data as ItemCfg; UpdateReduceSel(listItem, itemCfg); } private void OnLongPressReduce(EventContext context) { LongPressGesture gesture = (LongPressGesture)context.sender; var host = gesture.host; GObject obj = host.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); ItemCfg itemCfg = obj.data as ItemCfg; UpdateReduceSel(listItem, itemCfg); } private void UpdateReduceSel(UI_ListSelectorItem listItem, ItemCfg itemCfg) { if (_selCount == 0) { return; } if (listItem.m_txtSelNum.text == "0") { return; } if (_selDic.TryGetValue(itemCfg.id, out int num)) { if (num == 0) { return; } _selCount -= 1; _selDic[itemCfg.id] = num - 1; listItem.m_txtSelNum.text = Convert.ToString(Convert.ToInt32(listItem.m_txtSelNum.text) - 1); } else { _selCount -= 1; _selDic.Add(itemCfg.id, 0); listItem.m_txtSelNum.text = Convert.ToString(0); } SetSelAllNum(); } private void SetSelAllNum() { _ui.m_txtSelRewardStr.text = $"已选奖励:{_selCount}/{_count}"; } //弹出物品详细描述框 private void OnListSelectorItemClick(EventContext context) { GObject sender = context.sender as GObject; GObject obj = sender.parent; ItemCfg itemCfg = obj.data as ItemCfg; GoodsItemTipsController.ShowItemTips(itemCfg.id); } private void OnBtnCancelClick() { this.Hide(); } //确认按钮 private void OnBtnSubClick() { List reqItemList = new List(); foreach (var itemKv in _selDic) { reqItemList.Add(new GiftBoxSelChildItemProto { ChildItemId = itemKv.Key, ChildItemCount = itemKv.Value }); } ItemProxy.ReqUseGiftBoxSelItem(_itemId, reqItemList).Coroutine(); this.Hide(); } } }