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);  
 | 
    }  
 | 
}  
 |