using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; namespace MuHua { /// /// UI项容器 /// public class ModuleUIItems : ModuleUIPanel where TItem : ModuleUIItem { /// 模板资源 public readonly VisualTreeAsset templateAsset; /// 生成UI项的函数 public readonly Func generate; /// UI项列表 public List Items = new List(); /// 索引器 public TItem this[int index] { get => Items[index]; } /// 计数 public int Count { get => Items != null ? Items.Count : 0; } /// UI容器 public ModuleUIItems(VisualElement element, VisualTreeAsset templateAsset, Func generate) : base(element) { this.templateAsset = templateAsset; this.generate = generate; } /// 释放资源 public void Release() { element.Clear(); Items.ForEach(obj => obj.Dispose()); Items = new List(); } /// 创建UI项 public void Create(List datas, bool isClear = true) { if (isClear) { Release(); } datas.ForEach(Create); } /// 创建UI项 public void Create(TData data, bool isClear = false) { if (isClear) { Release(); } Create(data); } /// 创建UI项 public void Create(TData data) { VisualElement element = templateAsset.Instantiate(); TItem item = generate(data, element); this.element.Add(item.element); Items.Add(item); } /// 遍历 public void ForEach(Action action) { Items.ForEach(action); } /// 选择第一个 public void SelectFirst() { if (Items.Count > 0) { Items[0].Select(); } } /// 选择最后一个 public void SelectFinally() { if (Items.Count > 0) { Items[Count - 1].Select(); } } } }