(client) feat: Improve map generation logic (#36)

Co-authored-by: zzdxxz <2079238449@qq.com>
Co-committed-by: zzdxxz <2079238449@qq.com>
This commit is contained in:
2025-07-15 15:26:58 +08:00
committed by TheRedApricot
parent a662ecd2c9
commit 55cf9d954e
64 changed files with 2545 additions and 278 deletions

View File

@ -1,18 +1,27 @@
using System;
using System.Collections.Generic;
using System.IO;
using Data;
using UnityEngine;
using Utils;
namespace Managers
{
public class DefineManager : Singleton<DefineManager>
{
private const string coreNamespace = "Data";
private static readonly string[] dataSetFilePath = { "Data", "Mod" };
public Dictionary<string, Dictionary<string, Define>> defines = new();
public Dictionary<string, DefinePack> packs = new();
/// <summary>
/// 初始化定义管理器,加载所有定义包并构建定义字典。
/// </summary>
/// <remarks>
/// 该方法执行以下操作:
/// 1. 获取指定路径下的所有子文件夹,每个子文件夹代表一个定义包。
/// 2. 遍历每个定义包,尝试加载其中的定义数据。
/// 3. 将加载的定义数据按类型分类,并存储到定义字典中。
/// </remarks>
public void Init()
{
var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath));
@ -21,7 +30,7 @@ namespace Managers
var pack = new DefinePack();
if (pack.LoadPack(folder)) packs.Add(pack.packID, pack);
}
List<Tuple<Define,DefineReference>> defineRefs = new();
foreach (var pack in packs)
{
foreach (var define in pack.Value.defines)
@ -33,6 +42,37 @@ namespace Managers
foreach (var def in defList)
{
defines[typeName][def.defName] = def;
if (def is DefineReference reference)
{
defineRefs.Add(new(def,reference));
}
}
}
}
foreach (var defineRef in defineRefs)
{
var define = defineRef.Item1;
var reference = defineRef.Item2;
var referenceDef=FindDefine(reference.className,define.defName);
var property = define.GetType().GetProperty(reference.fieldName);
if (property != null && property.CanWrite)
{
property.SetValue(define, referenceDef);
}
else
{
// 如果是字段而不是属性
var field = define.GetType().GetField(reference.fieldName);
if (field != null)
{
field.SetValue(define, referenceDef);
}
else
{
// 处理找不到成员的情况
Debug.LogError($"Could not find field or property '{reference.fieldName}' in type {define.GetType().Name}");
}
}
}