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