using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; //用于显示获得物品的窗口 public class CommonGetItemWin : UIBase { [SerializeField] ScrollerController scroller; protected override void OnPreOpen() { ItemLogicUtility.Instance.OnGetItemShowEvent += OnGetItemShowEvent; scroller.OnRefreshCell += OnRefreshCell; CreateScroller(); } protected override void OnPreClose() { ItemLogicUtility.Instance.OnGetItemShowEvent -= OnGetItemShowEvent; scroller.OnRefreshCell -= OnRefreshCell; ItemLogicUtility.Instance.ClearGetItem(); } List showItems = new List(); void CreateScroller() { scroller.Refresh(); showItems = ItemLogicUtility.Instance.totalShowItems.Values.ToList(); showItems.Sort(SortItem); for (int i = 0; i < showItems.Count; i++) { if (i % 5 == 0) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } int SortItem(Item itemA, Item itemB) { var itemConfigA = ItemConfig.Get(itemA.id); var itemConfigB = ItemConfig.Get(itemB.id); return itemConfigB.ItemColor - itemConfigA.ItemColor; } float needRefreshTime; //避免封包过多卡顿 void OnGetItemShowEvent() { needRefreshTime = Time.time + 0.3f; } void RefreshScroller() { if (needRefreshTime <= 0) return; if (Time.time < needRefreshTime) return; if (scroller.GetNumberOfCells(scroller.m_Scorller) != ItemLogicUtility.Instance.totalShowItems.Count) { CreateScroller(); } else { scroller.m_Scorller.RefreshActiveCellViews(); } needRefreshTime = 0; } protected void LateUpdate() { RefreshScroller(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as CommonGetItemCell; _cell?.Display(cell.index, showItems); } }