Initial commit

This commit is contained in:
MuHua-123
2025-06-17 11:09:05 +08:00
commit 5e7fa2ef57
247 changed files with 22582 additions and 0 deletions
@@ -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,47 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
/// <summary>
/// UI项容器
/// </summary>
public class ModuleUIItems<TItem, TData> : ModuleUIPanel where TItem : ModuleUIItem<TData> {
public readonly VisualTreeAsset templateAsset;// 模板资源
public readonly Func<TData, VisualElement, TItem> generate;// 生成UI项的函数
public List<TItem> uiItems = new List<TItem>();// UI项列表
public TItem this[int index] { get => uiItems[index]; }// 索引器
/// <summary> UI容器 </summary>
public ModuleUIItems(VisualElement element, VisualTreeAsset templateAsset, Func<TData, VisualElement, TItem> generate) : base(element) {
this.templateAsset = templateAsset;
this.generate = generate;
}
/// <summary> 释放资源 </summary>
public void Release() {
element.Clear();
uiItems.ForEach(obj => obj.Release());
uiItems = new List<TItem>();
}
/// <summary> 创建UI项 </summary>
public void Create(List<TData> datas) {
Release();
datas.ForEach(Create);
}
/// <summary> 创建UI项 </summary>
public void Create(TData data) {
VisualElement element = templateAsset.Instantiate();
TItem item = generate(data, element);
this.element.Add(item.element);
uiItems.Add(item);
}
/// <summary> 遍历 </summary>
public void ForEach(Action<TItem> action) {
uiItems.ForEach(action);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b5854bcf80117aa49b327f2c19914ba3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,22 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
/// <summary>
/// 页面模块
/// </summary>
public abstract class ModuleUIPage : MonoBehaviour {
/// <summary> 绑定文档 </summary>
public UIDocument document;
/// <summary> 根目录文档 </summary>
public VisualElement root => document.rootVisualElement;
/// <summary> 绑定文档 </summary>
public abstract VisualElement Element { get; }
/// <summary> 添加UI元素 </summary>
public void Add(VisualElement child) => Element.Add(child);
/// <summary> 查询UI元素 </summary>
public T Q<T>(string name = null, string className = null) where T : VisualElement => Element.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,18 @@
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;
/// <summary> 查询UI元素 </summary>
public T Q<T>(string name = null, string className = null) where T : VisualElement => element.Q<T>(name, className);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 97e1bf60274de61419b2d9588340cafa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: