(client) feat:状态UI
This commit is contained in:
@ -67,24 +67,80 @@ namespace Managers
|
||||
if (packs.Count > 0)
|
||||
return;
|
||||
|
||||
// 获取所有定义包的文件夹路径
|
||||
// // 获取所有定义包的文件夹路径
|
||||
// var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath));
|
||||
// foreach (var folder in packFolder)
|
||||
// {
|
||||
// var pack = new DefinePack();
|
||||
// if (pack.LoadPack(folder))
|
||||
// {
|
||||
// packs.Add(pack.packID, pack);
|
||||
// }
|
||||
// }
|
||||
var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath));
|
||||
|
||||
// 获取当前的加载顺序
|
||||
var currentOrder = Base.Setting.Instance.CurrentSettings.loadOrder; // 假设为 string[]
|
||||
var isFirstLaunch = currentOrder == null || currentOrder.Length == 0;
|
||||
|
||||
var newOrder = new List<string>(); // 用于最终写回
|
||||
|
||||
foreach (var folder in packFolder)
|
||||
{
|
||||
var pack = new DefinePack();
|
||||
if (pack.LoadPack(folder))
|
||||
{
|
||||
// 根据加载顺序设置 priority
|
||||
int priority;
|
||||
|
||||
if (isFirstLaunch)
|
||||
{
|
||||
// 第一次启动,按遍历顺序设置 priority
|
||||
// 暂时使用新增时的顺序作为 priority,顺序从 newOrder 的索引确定
|
||||
priority = newOrder.Count;
|
||||
// 记录该 pack 的 ID,后续写回 loadOrder
|
||||
newOrder.Add(pack.packID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非首次启动,使用现有 loadOrder 中的位置来设置 priority
|
||||
var idx = Array.IndexOf(currentOrder, pack.packID);
|
||||
if (idx >= 0)
|
||||
{
|
||||
priority = idx;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 未出现在现有顺序中,放在末尾
|
||||
priority = currentOrder.Length;
|
||||
// 可选:也将其加入 newOrder 以更新 loadOrder
|
||||
}
|
||||
}
|
||||
|
||||
pack.priority = priority;
|
||||
packs.Add(pack.packID, pack);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是第一次启动,写回 loadOrder(顺序为 newOrder)
|
||||
if (isFirstLaunch)
|
||||
{
|
||||
// 将 newOrder 转换为 string[],并写回设置
|
||||
Base.Setting.Instance.CurrentSettings.loadOrder = new string[newOrder.Count];
|
||||
newOrder.CopyTo(Base.Setting.Instance.CurrentSettings.loadOrder);
|
||||
// 可能需要保存设置到磁盘/持久化
|
||||
// Example: Settings.Save(Base.Setting.Instance.CurrentSettings);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 字段信息缓存,用于优化反射性能。
|
||||
Dictionary<Type, FieldInfo[]> fieldCache = new();
|
||||
|
||||
// 存储需要进行链接的定义引用信息。
|
||||
// Tuple的元素依次代表:被引用的定义(Define),引用该定义的字段(FieldInfo),以及引用占位符(Define)。
|
||||
List<Tuple<Define, FieldInfo, Define>> defineCache = new();
|
||||
|
||||
|
||||
string currentPackID;
|
||||
|
||||
// 递归处理定义对象及其内部的嵌套定义和引用。
|
||||
@ -100,7 +156,7 @@ namespace Managers
|
||||
{
|
||||
// 获取所有公共实例字段。
|
||||
defineFields = def.GetType()
|
||||
.GetFields(BindingFlags.Public | BindingFlags.Instance);
|
||||
.GetFields(BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
// 缓存当前类型的字段信息。
|
||||
fieldCache[def.GetType()] = defineFields;
|
||||
@ -130,6 +186,7 @@ namespace Managers
|
||||
anonymousDefines.Add(typeName, new List<Define>());
|
||||
anonymousDefines[typeName].Add(defRef);
|
||||
}
|
||||
|
||||
ProcessDefine(defRef);
|
||||
}
|
||||
}
|
||||
@ -181,7 +238,7 @@ namespace Managers
|
||||
{
|
||||
if (!defines.ContainsKey(typeName))
|
||||
defines[typeName] = new Dictionary<string, Define>();
|
||||
|
||||
|
||||
foreach (var def in defList)
|
||||
{
|
||||
defines[typeName][def.defName] = def;
|
||||
@ -208,7 +265,8 @@ namespace Managers
|
||||
var value = FindDefine(defRef.Item3.description, defRef.Item3.defName);
|
||||
if (value == null)
|
||||
{
|
||||
Debug.LogError($"未找到引用,出错的定义:定义类型:{defRef.Item1.GetType().Name}, 定义名:{defRef.Item1.defName} ; 类型:{defRef.Item3.description}, 定义名:{defRef.Item3.defName}");
|
||||
Debug.LogError(
|
||||
$"未找到引用,出错的定义:定义类型:{defRef.Item1.GetType().Name}, 定义名:{defRef.Item1.defName} ; 类型:{defRef.Item3.description}, 定义名:{defRef.Item3.defName}");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
10
Client/Assets/Scripts/Managers/SaveManager.cs
Normal file
10
Client/Assets/Scripts/Managers/SaveManager.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
using Entity;
|
||||
|
||||
namespace Managers
|
||||
{
|
||||
public class SaveManager:Utils.Singleton<SaveManager>
|
||||
{
|
||||
public List<Hediff> baseHediffs = new();
|
||||
}
|
||||
}
|
3
Client/Assets/Scripts/Managers/SaveManager.cs.meta
Normal file
3
Client/Assets/Scripts/Managers/SaveManager.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: daa6e65f38a5495492e994e89eba53f4
|
||||
timeCreated: 1756655387
|
Reference in New Issue
Block a user