1
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace MuHua {
|
||||
/// <summary>
|
||||
/// UI项
|
||||
/// </summary>
|
||||
public abstract class ModuleUIItem<Data> : ModuleUIPanel {
|
||||
/// <summary> 选择事件 </summary>
|
||||
public static event Action<Data> OnSelect;
|
||||
/// <summary> 触发事件 </summary>
|
||||
public static void Select(Data data) => OnSelect?.Invoke(data);
|
||||
|
||||
/// <summary> 绑定的数据 </summary>
|
||||
public readonly Data value;
|
||||
/// <summary> UI项 </summary>
|
||||
public ModuleUIItem(Data value, VisualElement element) : base(element) {
|
||||
this.value = value;
|
||||
OnSelect += UIItem_OnSelect;
|
||||
}
|
||||
|
||||
/// <summary> 侦听选择事件 </summary>
|
||||
public virtual void UIItem_OnSelect(Data obj) {
|
||||
if (value.Equals(obj)) { SelectState(); } else { DefaultState(); }
|
||||
}
|
||||
|
||||
/// <summary> 触发选择事件 </summary>
|
||||
public virtual void Select() => OnSelect?.Invoke(value);
|
||||
/// <summary> 默认状态 </summary>
|
||||
public virtual void DefaultState() { }
|
||||
/// <summary> 选中状态 </summary>
|
||||
public virtual void SelectState() { }
|
||||
/// <summary> 释放 </summary>
|
||||
public virtual void Release() => OnSelect -= UIItem_OnSelect;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dfa6a8682a5ec384d98b88b54ace505f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace MuHua {
|
||||
/// <summary>
|
||||
/// UI项容器
|
||||
/// </summary>
|
||||
public class ModuleUIItems<Item, Data> : ModuleUIPanel where Item : ModuleUIItem<Data> {
|
||||
public readonly VisualTreeAsset templateAsset;
|
||||
public readonly Func<Data, VisualElement, Item> generate;
|
||||
public List<Item> uiItems = new List<Item>();
|
||||
/// <summary> UI容器 </summary>
|
||||
public ModuleUIItems(VisualElement element, VisualTreeAsset templateAsset, Func<Data, VisualElement, Item> generate) : base(element) {
|
||||
this.templateAsset = templateAsset;
|
||||
this.generate = generate;
|
||||
}
|
||||
/// <summary> 释放资源 </summary>
|
||||
public void Release() {
|
||||
element.Clear();
|
||||
uiItems.ForEach(obj => obj.Release());
|
||||
uiItems = new List<Item>();
|
||||
}
|
||||
/// <summary> 创建UI项 </summary>
|
||||
public void Create(List<Data> datas) {
|
||||
Release();
|
||||
datas.ForEach(Create);
|
||||
}
|
||||
/// <summary> 创建UI项 </summary>
|
||||
public void Create(Data data) {
|
||||
VisualElement element = templateAsset.Instantiate();
|
||||
Item item = generate(data, element);
|
||||
this.element.Add(item.element);
|
||||
uiItems.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b5854bcf80117aa49b327f2c19914ba3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace MuHua {
|
||||
/// <summary>
|
||||
/// 页面模块
|
||||
/// </summary>
|
||||
public class ModuleUIPage : MonoBehaviour {
|
||||
/// <summary> 绑定文档 </summary>
|
||||
public UIDocument document;
|
||||
/// <summary> 根目录文档 </summary>
|
||||
public VisualElement root => document.rootVisualElement;
|
||||
/// <summary> 添加UI元素 </summary>
|
||||
public void Add(VisualElement child) => root.Add(child);
|
||||
/// <summary> 查询UI元素 </summary>
|
||||
public T Q<T>(string name = null, string className = null) where T : VisualElement => root.Q<T>(name, className);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a20e816476c4c5d4b83e112be2e08697
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,16 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace MuHua {
|
||||
/// <summary>
|
||||
/// UI控件
|
||||
/// </summary>
|
||||
public class ModuleUIPanel {
|
||||
/// <summary> 绑定的元素 </summary>
|
||||
public readonly VisualElement element;
|
||||
/// <summary> UI控件 </summary>
|
||||
public ModuleUIPanel(VisualElement element) => this.element = element;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 97e1bf60274de61419b2d9588340cafa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user