| 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<Item> showItems = new List<Item>();  | 
|     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);  | 
|     }  | 
| }  |