diff --git a/Client/Assets/Scripts/Data/Define.cs b/Client/Assets/Scripts/Data/Define.cs index db15281..11940b5 100644 --- a/Client/Assets/Scripts/Data/Define.cs +++ b/Client/Assets/Scripts/Data/Define.cs @@ -8,13 +8,15 @@ using System.Xml.Linq; namespace Data { - public abstract class Define + public class Define { public string defName; public string description; public string label; public string packID; + public bool isReferene=false; + /// /// 初始化方法,根据传入的 XML 元素 () 进行处理。 /// @@ -112,18 +114,5 @@ namespace Data return string.Join(Environment.NewLine, text.Split('\n').Select(line => prefix + line)); } } - - public class DefineReference : Define - { - public Define def; - public string className; - public string fieldName; - - public DefineReference(string className, string defName, string fieldName) - { - this.defName = defName; - this.className = className; - this.fieldName = fieldName; - } - } + } \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/DefinePack.cs b/Client/Assets/Scripts/Data/DefinePack.cs index b729adf..0e8e11e 100644 --- a/Client/Assets/Scripts/Data/DefinePack.cs +++ b/Client/Assets/Scripts/Data/DefinePack.cs @@ -262,8 +262,12 @@ namespace Data } else { - value = new DefineReference(field.FieldType.Name, element.Value, field.Name); - + var reference = (Define)Activator.CreateInstance(field.FieldType); + reference.isReferene = true; + reference.description=field.FieldType.Name; + reference.label = field.Name; + reference.defName = element.Value; + value = reference; } } else diff --git a/Client/Assets/Scripts/Data/MapDefine.cs b/Client/Assets/Scripts/Data/MapDefine.cs index 2cedc51..b49f370 100644 --- a/Client/Assets/Scripts/Data/MapDefine.cs +++ b/Client/Assets/Scripts/Data/MapDefine.cs @@ -8,7 +8,7 @@ namespace Data { public class TileDef : Define { - public string texturePath = ""; + public ImageDef texture; public string name = ""; public override bool Init(XElement xmlDef) @@ -45,6 +45,12 @@ namespace Data return true; } } - + + public class ImageDef : Define + { + public string path; + public int wCount; + public int hCount; + } } \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/Monster.cs b/Client/Assets/Scripts/Entity/Monster.cs index 33af0b8..59be189 100644 --- a/Client/Assets/Scripts/Entity/Monster.cs +++ b/Client/Assets/Scripts/Entity/Monster.cs @@ -2,7 +2,11 @@ namespace Entity { public class Monster { - + public Protocol.MonsterPack ToPack() + { + var pack= new Protocol.MonsterPack(); + return pack; + } } public class MonsterAttributes diff --git a/Client/Assets/Scripts/Managers/DefineManager.cs b/Client/Assets/Scripts/Managers/DefineManager.cs index 7af89ce..a9f3bce 100644 --- a/Client/Assets/Scripts/Managers/DefineManager.cs +++ b/Client/Assets/Scripts/Managers/DefineManager.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Reflection; using Data; using UnityEngine; using Utils; @@ -30,52 +32,53 @@ namespace Managers var pack = new DefinePack(); if (pack.LoadPack(folder)) packs.Add(pack.packID, pack); } - List> defineRefs = new(); + + Dictionary fieldCache = new(); + //不优化到循环里面是因为要先建立索引再链接 + List> defineCache = new(); + foreach (var pack in packs) { foreach (var define in pack.Value.defines) { - var typeName=define.Key; - var defList=define.Value; + var typeName = define.Key; + var defList = define.Value; + if (!defines.ContainsKey(typeName)) defines[typeName] = new Dictionary(); + foreach (var def in defList) { defines[typeName][def.defName] = def; - if (def is DefineReference reference) + + // 如果字段信息已经缓存,则直接使用缓存 + if (!fieldCache.TryGetValue(def.GetType(), out var defineFields)) { - defineRefs.Add(new(def,reference)); + // 获取所有字段类型为 Define 或其派生类型的字段 + defineFields = def.GetType() + .GetFields(BindingFlags.Public | BindingFlags.Instance) + .Where(field => typeof(Define).IsAssignableFrom(field.FieldType)) + .ToArray(); + // 缓存字段信息 + fieldCache[def.GetType()] = defineFields; + } + + foreach (var defineField in defineFields) + { + var defRef=(Define)defineField.GetValue(def); + if (defRef==null || !defRef.isReferene) + continue; + defineCache.Add(new(def, defineField, defRef)); } } } } - foreach (var defineRef in defineRefs) + foreach (var defRef in defineCache) { - 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}"); - } - } + defRef.Item2.SetValue(defRef.Item1, FindDefine(defRef.Item3.description, defRef.Item3.defName)); } + } /// /// 查找指定定义类型的定义名对应的 Define 对象。 diff --git a/Client/Assets/Scripts/Map/DoubleMap.cs b/Client/Assets/Scripts/Map/DoubleMap.cs index 2d88a58..4816ef1 100644 --- a/Client/Assets/Scripts/Map/DoubleMap.cs +++ b/Client/Assets/Scripts/Map/DoubleMap.cs @@ -7,26 +7,29 @@ namespace Map { public class DoubleMap : MonoBehaviour { - public Tilemap dataLevel; + public List> mapData = new(); + // public Tilemap dataLevel; public Tilemap textureLevel; public Dictionary tileDict = new(); void Start() { - tileDict = Configs.ConfigProcessor.LoadResources("TileMap"); - var tile= tileDict.Values; - for (int i = 0; i < 100; i++) - { - for (int j = 0; j < 100; j++) - { - textureLevel.SetTile(new(i,j),tile.First()); - } - } + TileManager.Instance.Init(); } - } - public class TileMappingTable:Utils.Singleton - { + public void UpdateTexture() + { + + } } + + public class TileManager:Utils.Singleton + { + Dictionary tileDict = new(); + public void Init() + { + + } + } } diff --git a/Client/Data/Core/Define/Map/Map.xml b/Client/Data/Core/Define/Map/Map.xml index 2c9384d..b73c6fd 100644 --- a/Client/Data/Core/Define/Map/Map.xml +++ b/Client/Data/Core/Define/Map/Map.xml @@ -1,5 +1,18 @@ + + GrassDirtTexture + Map\GrassSoild.png + 4 + 4 + + + + GrassDirtTiles + GrassDirtTexture + GrassDirt + + GrassDirtTable diff --git a/Client/Data/Core/Define/Player/CatGirl.xml b/Client/Data/Core/Define/Player/CatGirl.xml index 5516c08..41b6a56 100644 --- a/Client/Data/Core/Define/Player/CatGirl.xml +++ b/Client/Data/Core/Define/Player/CatGirl.xml @@ -3,7 +3,7 @@ CatGirl 100 - 1.2 + 2 diff --git a/Client/Data/Core/Resource/Character/CatGirl/body/east.png b/Client/Data/Core/Resources/Character/CatGirl/body/east.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/body/east.png rename to Client/Data/Core/Resources/Character/CatGirl/body/east.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/body/north.png b/Client/Data/Core/Resources/Character/CatGirl/body/north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/body/north.png rename to Client/Data/Core/Resources/Character/CatGirl/body/north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/body/south.png b/Client/Data/Core/Resources/Character/CatGirl/body/south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/body/south.png rename to Client/Data/Core/Resources/Character/CatGirl/body/south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/clothing/east.png b/Client/Data/Core/Resources/Character/CatGirl/clothing/east.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/clothing/east.png rename to Client/Data/Core/Resources/Character/CatGirl/clothing/east.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/clothing/north.png b/Client/Data/Core/Resources/Character/CatGirl/clothing/north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/clothing/north.png rename to Client/Data/Core/Resources/Character/CatGirl/clothing/north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/clothing/south.png b/Client/Data/Core/Resources/Character/CatGirl/clothing/south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/clothing/south.png rename to Client/Data/Core/Resources/Character/CatGirl/clothing/south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_east.png b/Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_east.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_east.png rename to Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_east.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_north.png b/Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_north.png rename to Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_south.png b/Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hair/KiiroHair5_south.png rename to Client/Data/Core/Resources/Character/CatGirl/hair/KiiroHair5_south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_east.png b/Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_east.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_east.png rename to Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_east.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_north.png b/Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_north.png rename to Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_south.png b/Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/hairBackground/KiiroHairBG5_south.png rename to Client/Data/Core/Resources/Character/CatGirl/hairBackground/KiiroHairBG5_south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_north.png b/Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_north.png rename to Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_south.png b/Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_south.png rename to Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_west.png b/Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_west.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/head/KiiroHeadH1_west.png rename to Client/Data/Core/Resources/Character/CatGirl/head/KiiroHeadH1_west.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_north.png b/Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_north.png rename to Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_south.png b/Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_south.png rename to Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_south.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_west.png b/Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_west.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/leftEar/LeftEar_west.png rename to Client/Data/Core/Resources/Character/CatGirl/leftEar/LeftEar_west.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_east.png b/Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_east.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_east.png rename to Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_east.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_north.png b/Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_north.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_north.png rename to Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_north.png diff --git a/Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_south.png b/Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_south.png similarity index 100% rename from Client/Data/Core/Resource/Character/CatGirl/rightEar/RightEar_south.png rename to Client/Data/Core/Resources/Character/CatGirl/rightEar/RightEar_south.png diff --git a/Client/Data/Core/Resources/Map/GrassDirtDirtWater.png b/Client/Data/Core/Resources/Map/GrassDirtDirtWater.png new file mode 100644 index 0000000..8362102 Binary files /dev/null and b/Client/Data/Core/Resources/Map/GrassDirtDirtWater.png differ diff --git a/Client/Data/Core/Resources/Map/GrassDirtWaterWater.png b/Client/Data/Core/Resources/Map/GrassDirtWaterWater.png new file mode 100644 index 0000000..7dbbc5d Binary files /dev/null and b/Client/Data/Core/Resources/Map/GrassDirtWaterWater.png differ diff --git a/Client/Data/Core/Resources/Map/GrassGrassDirtWater.png b/Client/Data/Core/Resources/Map/GrassGrassDirtWater.png new file mode 100644 index 0000000..b12f6be Binary files /dev/null and b/Client/Data/Core/Resources/Map/GrassGrassDirtWater.png differ diff --git a/Client/Data/Core/Resources/Map/GrassSoild.png b/Client/Data/Core/Resources/Map/GrassSoild.png new file mode 100644 index 0000000..a821096 Binary files /dev/null and b/Client/Data/Core/Resources/Map/GrassSoild.png differ diff --git a/Client/Data/Core/Resources/Map/GrassWater.png b/Client/Data/Core/Resources/Map/GrassWater.png new file mode 100644 index 0000000..f5feaae Binary files /dev/null and b/Client/Data/Core/Resources/Map/GrassWater.png differ diff --git a/Client/Data/Core/Resources/Map/SoildWater.png b/Client/Data/Core/Resources/Map/SoildWater.png new file mode 100644 index 0000000..aa721a9 Binary files /dev/null and b/Client/Data/Core/Resources/Map/SoildWater.png differ