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,数量> public override void Dispose() { base.Dispose(); if (_selDic != null) { _selDic.Clear(); _selDic = null; } if (_ui != null) { _ui.Dispose(); _ui = null; } } 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_comItemNumBag.m_txtNum.text = itemChildArr[1].ToString(); uiItemChild.m_txtSelNum.text = "0"; uiItemChild.m_btnAdd.onClick.Add(OnChildBtnAddClick); uiItemChild.m_btnReduce.onClick.Add(OnChildBtnReduceClick); uiItemChild.target.data = itemCfgChild; UI_ListSelectorItem.ProxyEnd(); } private void OnChildBtnAddClick(EventContext context) { GObject sender = context.sender as GObject; GObject obj = sender.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); if (_selCount == _count) { return; } if (listItem.m_txtSelNum.text == _count.ToString()) { return; } ItemCfg itemCfg = obj.data as ItemCfg; 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 SetSelAllNum() { _ui.m_txtSelRewardStr.text = $"已选奖励:{_selCount}/{_count}"; } private void OnChildBtnReduceClick(EventContext context) { GObject sender = context.sender as GObject; GObject obj = sender.parent; UI_ListSelectorItem listItem = UI_ListSelectorItem.Proxy(obj); if (_selCount == 0) { return; } if (listItem.m_txtSelNum.text == "0") { return; } ItemCfg itemCfg = obj.data as ItemCfg; 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 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(); } } }