using System; using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using MuHua; namespace MuHua { /// /// 滑块按钮 - 数据 /// public abstract class DataSlideButton { /// 绑定的元素 public VisualElement element; } /// /// 滑动按钮 /// public class UISlideButton : ModuleUIPanel, UIControl where TItem : ModuleUIItem where Data : DataSlideButton { /// 绑定的画布 public readonly VisualElement canvas; /// 选中数据 public Data data; /// UI项容器 public ModuleUIItems Items; /// 索引器 public TItem this[int index] { get => Items[index]; } /// 计数 public int Count { get => Items != null ? Items.Count : 0; } /// 滑块 public VisualElement Slide => Q("Slide"); /// 容器 public VisualElement Container => Q("Container"); public UISlideButton(VisualElement element, VisualElement canvas, VisualTreeAsset templateAsset, Func generate) : base(element) { this.canvas = canvas; Items = new ModuleUIItems(Container, templateAsset, generate); ModuleUIItem.OnSelect += Settings; } public virtual void Dispose() { Items.Release(); } public virtual void Update() { if (data == null || data.element == null) { return; } Vector3 offset = data.element.worldBound.position - Slide.worldBound.position; Slide.transform.position += offset * Time.deltaTime * 20; } /// 设置UI项 public virtual void Settings(Data data) => this.data = data; /// 释放资源 public virtual void Release() => Items.Release(); /// 创建UI项 public virtual void Create(List datas, bool isClear = true) => Items.Create(datas, isClear); /// 创建UI项 public virtual void Create(Data data, bool isClear = false) => Items.Create(data, isClear); /// 遍历 public virtual void ForEach(Action action) => Items.ForEach(action); /// 选择第一个 public virtual void SelectFirst() => Items.SelectFirst(); /// 选择最后一个 public virtual void SelectFinally() => Items.SelectFinally(); } }