This commit is contained in:
MuHua-123
2025-03-07 19:20:55 +08:00
parent c8f1873939
commit 5e819d5257
98 changed files with 389 additions and 180 deletions
@@ -0,0 +1,16 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 单例基类
/// </summary>
public class Module<T> where T : Module<T>, new() {
/// <summary> 模块单例 </summary>
public static T I => Instantiate();
protected static T instance;
protected static T Instantiate() => instance == null ? instance = new T() : instance;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 864d5767e91be034eb47a0561aba685a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,60 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 资源模块
/// </summary>
public class ModuleAssets<Data> : Module<ModuleAssets<Data>> {
protected List<Data> datas = new List<Data>();
/// <summary> 更改事件 </summary>
public virtual event Action<ModuleAssets<Data>> OnChange;
/// <summary> 数据列表 </summary>
public virtual List<Data> Datas => datas;
/// <summary> 数据计数 </summary>
public virtual int Count => Datas.Count;
/// <summary> 数据操作 </summary
public virtual Data this[int index] => Datas[index];
/// <summary> 添加数据 </summary>
public virtual void Add(Data data) { Datas.Add(data); OnChange?.Invoke(this); }
/// <summary> 添加数据 </summary>
public virtual void Add(IList<Data> data) { Datas.AddRange(data); OnChange?.Invoke(this); }
/// <summary> 删除数据 </summary>
public virtual void Remove(Data data) { Datas.Remove(data); OnChange?.Invoke(this); }
/// <summary> 清除数据 </summary>
public virtual void Clear() { Datas.Clear(); OnChange?.Invoke(this); }
/// <summary> 保存数据 </summary>
public virtual void Save() { throw new NotImplementedException(); }
/// <summary> 加载数据 </summary>
public virtual void Load() { throw new NotImplementedException(); }
/// <summary> 循环列表 </summary>
public virtual void ForEach(Action<Data> action) => Datas.ForEach(action);
}
/// <summary>
/// 资源模块工具
/// </summary>
public static class AssetsTool {
/// <summary> 头尾循环标准化索引 </summary>
public static Data LoopIndex<Data>(this ModuleAssets<Data> assets, int index) {
return assets[LoopIndex(index, assets.Count)];
}
/// <summary> 头尾循环标准化索引 </summary>
public static Data LoopIndex<Data>(this List<Data> list, int index) {
return list[LoopIndex(index, list.Count)];
}
/// <summary> 头尾循环标准化索引 </summary>
public static Data LoopIndex<Data>(this Data[] array, int index) {
return array[LoopIndex(index, array.Length)];
}
/// <summary> 头尾循环标准化索引 </summary>
public static int LoopIndex(int index, int maxIndex) {
return index % maxIndex;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f240e58226b9d1440b23f97be93c4f00
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 数据
/// </summary>
public abstract class ModuleData<T> where T : ModuleData<T> {
/// <summary> 可视化对象 </summary>
public ModulePrefab<T> visual;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6266364f7baf1e741b8951d0ae0a1608
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 事件处理器
/// </summary>
public class ModuleHandle<Data> : Module<ModuleAssets<Data>> {
/// <summary> 数据 </summary>
protected Data value;
/// <summary> 当前数据 </summary>
public virtual Data Current => value;
/// <summary> 当前数据是否有效 </summary>
public virtual bool IsValid => Current != null;
/// <summary> 改变当前数据 Event </summary>
public virtual event Action<Data> OnChange;
/// <summary> 改变当前数据 </summary>
public virtual void Change() => OnChange?.Invoke(value);
/// <summary> 改变当前数据 </summary>
public virtual void Change(Data value) { this.value = value; Change(); }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7e27b368a7807c74987bd3cb5287968a
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;
namespace MuHua {
/// <summary>
/// 数据预制件
/// </summary>
public abstract class ModulePrefab<T> : MonoBehaviour where T : ModuleData<T> {
/// <summary> 关联的数据 </summary>
protected T value;
/// <summary> 关联的数据 </summary>
public virtual T Value => value;
/// <summary> 更新可视化内容 </summary>
public virtual void UpdateVisual(T value) => this.value = value;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fa7816f4efcec004e99b05e88149b6a0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,30 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 单例行为
/// </summary>
public abstract class ModuleSingle<T> : MonoBehaviour where T : ModuleSingle<T> {
/// <summary> 模块单例 </summary>
public static T I => instance;
/// <summary> 模块单例 </summary>
protected static T instance;
/// <summary> 初始化 </summary>
protected abstract void Awake();
/// <summary> 替换,并且设置切换场景不销毁 </summary>
protected virtual void Replace(bool isDontDestroy = true) {
if (instance != null) { Destroy(instance.gameObject); }
instance = (T)this;
if (isDontDestroy) { DontDestroyOnLoad(gameObject); }
}
/// <summary> 不替换,并且设置切换场景不销毁 </summary>
protected virtual void NoReplace(bool isDontDestroy = true) {
if (isDontDestroy) { DontDestroyOnLoad(gameObject); }
if (instance == null) { instance = (T)this; }
else { Destroy(gameObject); }
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 103d1480bcf841b40858282d95c83e99
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,41 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MuHua {
/// <summary>
/// 数据可视化
/// </summary>
public class ModuleVisual<T> : ModuleSingle<ModuleVisual<T>> where T : ModuleData<T> {
/// <summary> 生成空间 </summary>
public Transform space;
/// <summary> 数据预制件 </summary>
public Transform prefab;
/// <summary> 替换旧的 </summary>
protected override void Awake() => Replace();
/// <summary> 更新可视化内容 </summary>
public virtual void UpdateVisual(T data) {
Create(ref data.visual, prefab, space);
data.visual.UpdateVisual(data);
}
/// <summary> 释放可视化内容 </summary>
public virtual void ReleaseVisual(T data) {
if (data.visual != null) { Destroy(data.visual.gameObject); }
data.visual = null;
}
/// <summary> 创建可视化内容 </summary>
public static void Create<Type>(ref Type value, Transform original, Transform parent) {
if (value != null) { return; }
Transform temp = CreateTransform(original, parent);
value = temp.GetComponent<Type>();
}
/// <summary> 创建Transform </summary>
public static Transform CreateTransform(Transform original, Transform parent) {
Transform temp = Transform.Instantiate(original, parent);
temp.gameObject.SetActive(true);
return temp;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: aff4fda1c9fd8164384489f6750e34f4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: