using System;
using System.Collections.Generic;
using UnityEngine;
namespace GameLogic
{
///
/// UI列表。
///
public class UILoopGridWidget : UIListBase where TItem : UILoopGridItemWidget, new()
{
///
/// LoopRectView
///
public LoopGridView LoopRectView { private set; get; }
///
/// Item字典
///
private Dictionary m_itemCache = new Dictionary();
///
/// 计算偏差后的ItemList
///
private List m_items = new List();
///
/// 计算偏差后的ItemList
///
public List items => m_items;
public override void BindMemberProperty()
{
base.BindMemberProperty();
LoopRectView = rectTransform.GetComponent();
}
public override void OnCreate()
{
base.OnCreate();
LoopRectView.InitGridView(0, OnGetItemByIndex);
}
public override void OnDestroy()
{
base.OnDestroy();
m_itemCache.Clear();
}
///
/// Item回调函数
///
protected Action m_tpFuncItem;
///
/// 设置显示数据
///
///
///
///
protected override void AdjustItemNum(int n, List datas = null, Action funcItem = null)
{
base.AdjustItemNum(n, datas, funcItem);
m_tpFuncItem = funcItem;
LoopRectView.SetListItemCount(n);
LoopRectView.RefreshAllShownItem();
m_tpFuncItem = null;
}
///
/// 获取Item
///
///
///
///
///
///
protected LoopGridViewItem OnGetItemByIndex(LoopGridView listView, int itemIndex,int row,int column)
{
if (itemIndex < 0 || itemIndex >= num) return null;
var item = itemBase == null ? CreateItem() : CreateItem(itemBase);
if (item == null) return null;
item.SetItemIndex(itemIndex);
UpdateListItem(item, itemIndex, m_tpFuncItem);
return item.LoopItem;
}
///
/// 创建Item
///
///
public TItem CreateItem()
{
return CreateItem(typeof(TItem).Name);
}
///
/// 创建Item
///
///
///
public TItem CreateItem(string itemName)
{
TItem widget = null;
LoopGridViewItem item = LoopRectView.AllocOrNewListViewItem(itemName);
if (item != null)
{
widget = CreateItem(item);
}
return widget;
}
///
/// 创建Item
///
///
///
public TItem CreateItem(GameObject prefab)
{
TItem widget = null;
LoopGridViewItem item = LoopRectView.AllocOrNewListViewItem(prefab);
if (item != null)
{
widget = CreateItem(item);
}
return widget;
}
///
/// 创建Item
///
///
///
private TItem CreateItem(LoopGridViewItem item)
{
TItem widget;
if (!m_itemCache.TryGetValue(item.GoId, out widget))
{
widget = CreateWidget(item.gameObject);
widget.LoopItem = item;
m_itemCache.Add(item.GoId, widget);
}
return widget;
}
///
/// 获取item
///
///
///
public override TItem GetItem(int i)
{
return i >= 0 && i < m_items.Count ? m_items[i] : null;
}
///
/// 获取itemList
///
///
public List GetItemList()
{
m_items.Clear();
for (int i = 0; i < m_itemCache.Count; i++)
{
m_items.Add(m_itemCache[i]);
}
return m_items;
}
}
}