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 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.Dispose();
}
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.Dispose();
/// 创建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();
}
}