using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
//用于显示获得物品的窗口
|
public class CommonGetItemWin : UIBase
|
{
|
[SerializeField] ScrollerController scroller;
|
[SerializeField] RichText desc;
|
[SerializeField] Button sureBtn;
|
[SerializeField] Text sureText;
|
[SerializeField] TextEx closeText;
|
|
|
float openTime;
|
|
protected override void InitComponent()
|
{
|
base.InitComponent();
|
Debug.Log("初始化通用获得物品窗口");
|
sureBtn.SetListener(() => UIManager.Instance.CloseWindow<CommonGetItemWin>());
|
}
|
|
public override void Refresh()
|
{
|
base.Refresh();
|
Debug.Log("刷新通用获得物品窗口");
|
}
|
|
protected override void OnPreOpen()
|
{
|
Refresh();
|
ItemLogicUtility.Instance.OnGetItemShowEvent += OnGetItemShowEvent;
|
scroller.OnRefreshCell += OnRefreshCell;
|
desc.SetActive(!string.IsNullOrEmpty(ItemLogicUtility.Instance.getItemInfo));
|
desc.text = ItemLogicUtility.Instance.getItemInfo;
|
sureText.text = ItemLogicUtility.Instance.getItemBtnText;
|
CreateScroller();
|
closeText.text = Language.Get("L2004");
|
openTime = Time.time;
|
}
|
|
|
protected override void OnPreClose()
|
{
|
ItemLogicUtility.Instance.OnGetItemShowEvent -= OnGetItemShowEvent;
|
scroller.OnRefreshCell -= OnRefreshCell;
|
ItemLogicUtility.Instance.OnGetItem?.Invoke();
|
ItemLogicUtility.Instance.ClearGetItem();
|
|
}
|
|
void CreateScroller()
|
{
|
scroller.Refresh();
|
var keys = ItemLogicUtility.Instance.totalShowItems.Keys.ToList();
|
int rowCount = (int)Mathf.Ceil((float)keys.Count / 5);
|
for (int i = 0; i < rowCount; i++)
|
{
|
scroller.AddCell(ScrollerDataType.Header, i);
|
}
|
scroller.Restart();
|
}
|
|
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();
|
if (ItemLogicUtility.Instance.closeSeconds == 0)
|
return;
|
|
float closeTime = ItemLogicUtility.Instance.closeSeconds - (Time.time - openTime);
|
if (closeTime <= 0)
|
{
|
UIManager.Instance.CloseWindow<CommonGetItemWin>();
|
return;
|
}
|
closeText.text = Language.Get("AutoCloseAfterSeconds", (int)closeTime);
|
}
|
|
void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell as CommonGetItemCell;
|
_cell?.Display(cell.index);
|
}
|
}
|