diff --git a/GFramework.Game/assets/AbstractAssetCatalogSystem.cs b/GFramework.Game/assets/AbstractAssetCatalogSystem.cs index bb956a2..f88a8ed 100644 --- a/GFramework.Game/assets/AbstractAssetCatalogSystem.cs +++ b/GFramework.Game/assets/AbstractAssetCatalogSystem.cs @@ -9,8 +9,8 @@ namespace GFramework.Game.assets; /// public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalogSystem { - private readonly Dictionary _gameUnits = new(); - private readonly Dictionary _templates = new(); + private readonly Dictionary _sceneUnits = new(); + private readonly Dictionary _scenePages = new(); private readonly Dictionary _assets = new(); @@ -31,62 +31,65 @@ public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalog #region Register(内部 or Module 使用) + /// - /// 注册一个游戏单元(GameUnit),使用指定的键和路径。 + /// 注册场景单元到资产目录中 /// - /// 唯一标识该游戏单元的字符串键。 - /// 该游戏单元对应的资源路径。 - /// 当键已存在时抛出异常。 - public void RegisterGameUnit(string key, string path) + /// 场景单元的唯一标识键 + /// 场景单元资源的路径 + /// 当指定的键已存在时抛出异常 + public void RegisterSceneUnit(string key, string path) { - if (!_gameUnits.TryAdd(key, new AssetCatalog.GameUnitId(path))) - throw new InvalidOperationException($"GameUnit key duplicated: {key}"); + // 尝试添加场景单元,如果键已存在则抛出异常 + if (!_sceneUnits.TryAdd(key, new AssetCatalog.SceneUnitId(path))) + throw new InvalidOperationException($"SceneUnit key duplicated: {key}"); } /// - /// 根据映射对象注册一个游戏单元(GameUnit)。 + /// 通过资产目录映射注册场景单元 /// - /// 包含键与ID映射关系的对象。 - /// - /// 当映射ID不是 类型或键重复时抛出异常。 - /// - public void RegisterGameUnit(AssetCatalog.AssetCatalogMapping mapping) + /// 包含场景单元信息的资产目录映射对象 + /// 当映射ID不是SceneUnitId类型或键已存在时抛出异常 + public void RegisterSceneUnit(AssetCatalog.AssetCatalogMapping mapping) { - if (mapping.Id is not AssetCatalog.GameUnitId sceneId) - throw new InvalidOperationException("Mapping ID is not a GameUnitId"); + // 验证映射ID是否为SceneUnitId类型 + if (mapping.Id is not AssetCatalog.SceneUnitId sceneId) + throw new InvalidOperationException("Mapping ID is not a SceneUnitId"); - if (!_gameUnits.TryAdd(mapping.Key, sceneId)) + // 尝试添加场景单元,如果键已存在则抛出异常 + if (!_sceneUnits.TryAdd(mapping.Key, sceneId)) throw new InvalidOperationException($"Scene key duplicated: {mapping.Key}"); } /// - /// 注册一个模板资源(Template),使用指定的键和路径。 + /// 注册场景页面模板 /// - /// 唯一标识该模板的字符串键。 - /// 该模板对应的资源路径。 - /// 当键已存在时抛出异常。 - public void RegisterTemplate(string key, string path) + /// 场景页面的唯一标识键 + /// 场景页面资源路径 + /// 当键已存在时抛出异常 + public void RegisterScenePage(string key, string path) { - if (!_templates.TryAdd(key, new AssetCatalog.TemplateId(path))) + if (!_scenePages.TryAdd(key, new AssetCatalog.ScenePageId(path))) throw new InvalidOperationException($"Template key duplicated: {key}"); } - + /// - /// 根据映射对象注册一个模板资源(Template)。 + /// 通过资产目录映射注册场景页面 /// - /// 包含键与ID映射关系的对象。 - /// - /// 当映射ID不是 类型或键重复时抛出异常。 - /// - public void RegisterTemplate(AssetCatalog.AssetCatalogMapping mapping) + /// 包含场景页面信息的资产目录映射对象 + /// 当映射ID不是ScenePageId类型或键已存在时抛出异常 + public void RegisterScenePage(AssetCatalog.AssetCatalogMapping mapping) { - if (mapping.Id is not AssetCatalog.TemplateId templateId) - throw new InvalidOperationException("Mapping ID is not a TemplateId"); + // 验证映射ID是否为ScenePageId类型 + if (mapping.Id is not AssetCatalog.ScenePageId templateId) + throw new InvalidOperationException("Mapping ID is not a ScenePageId"); - if (!_templates.TryAdd(mapping.Key, templateId)) + // 尝试添加场景页面,如果键已存在则抛出异常 + if (!_scenePages.TryAdd(mapping.Key, templateId)) throw new InvalidOperationException($"Template key duplicated: {mapping.Key}"); } + /// /// 注册一个通用资源(Asset),使用指定的键和路径。 /// @@ -119,20 +122,18 @@ public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalog #region Query(对外) /// - /// 获取指定键对应的游戏单元ID。 + /// 根据指定的键获取场景单元标识符 /// - /// 要查找的游戏单元键。 - /// 对应的游戏单元ID。 - /// 如果未找到指定键则抛出异常。 - public AssetCatalog.GameUnitId GetGameUnit(string key) => _gameUnits[key]; + /// 用于查找场景单元的键值 + /// 返回与指定键对应的场景单元标识符 + public AssetCatalog.SceneUnitId GetSceneUnit(string key) => _sceneUnits[key]; /// - /// 获取指定键对应的模板资源ID。 + /// 根据指定的键获取场景页面标识符 /// - /// 要查找的模板资源键。 - /// 对应的模板资源ID。 - /// 如果未找到指定键则抛出异常。 - public AssetCatalog.TemplateId GetTemplate(string key) => _templates[key]; + /// 用于查找场景页面的键值 + /// 返回与指定键对应的场景页面标识符 + public AssetCatalog.ScenePageId GetScenePage(string key) => _scenePages[key]; /// /// 获取指定键对应的通用资源ID。 @@ -143,18 +144,18 @@ public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalog public AssetCatalog.AssetId GetAsset(string key) => _assets[key]; /// - /// 判断是否存在指定键的游戏单元。 + /// 检查是否存在指定键的场景单元 /// - /// 要检查的游戏单元键。 - /// 若存在返回 true,否则返回 false。 - public bool HasGameUnit(string key) => _gameUnits.ContainsKey(key); + /// 用于查找场景单元的键值 + /// 存在返回true,否则返回false + public bool HasSceneUnit(string key) => _sceneUnits.ContainsKey(key); /// - /// 判断是否存在指定键的模板资源。 + /// 检查是否存在指定键的场景页面 /// - /// 要检查的模板资源键。 - /// 若存在返回 true,否则返回 false。 - public bool HasTemplate(string key) => _templates.ContainsKey(key); + /// 用于查找场景页面的键值 + /// 存在返回true,否则返回false + public bool HasScenePage(string key) => _scenePages.ContainsKey(key); /// /// 判断是否存在指定键的通用资源。 diff --git a/GFramework.Game/assets/AssetCatalog.cs b/GFramework.Game/assets/AssetCatalog.cs index 67f8c3d..221f857 100644 --- a/GFramework.Game/assets/AssetCatalog.cs +++ b/GFramework.Game/assets/AssetCatalog.cs @@ -1,5 +1,4 @@ - -namespace GFramework.Game.assets; +namespace GFramework.Game.assets; /// /// 资源目录类,用于定义和管理游戏中的场景和资源标识符 @@ -24,17 +23,19 @@ public static class AssetCatalog /// 资源标识符 public readonly record struct AssetCatalogMapping(string Key, IAssetId Id); + /// - /// 模板资源标识符结构体,实现IAssetId接口 + /// 场景页面资源标识符结构体,用于标识场景页面资源 /// - /// 资源路径 - public readonly record struct TemplateId(string Path) : IAssetId; + /// 场景页面资源路径 + public readonly record struct ScenePageId(string Path) : IAssetId; + /// - /// 游戏单位资源标识符结构体,实现IAssetId接口 + /// 场景单元资源标识符结构体,用于标识场景单元资源 /// - /// 资源路径 - public readonly record struct GameUnitId(string Path) : IAssetId; + /// 场景单元资源路径 + public readonly record struct SceneUnitId(string Path) : IAssetId; /// /// 通用资源标识符结构体,实现IAssetId接口 @@ -43,3 +44,4 @@ public static class AssetCatalog public readonly record struct AssetId(string Path) : IAssetId; } + diff --git a/GFramework.Game/assets/IAssetCatalogSystem.cs b/GFramework.Game/assets/IAssetCatalogSystem.cs index 4563bf5..2f2345b 100644 --- a/GFramework.Game/assets/IAssetCatalogSystem.cs +++ b/GFramework.Game/assets/IAssetCatalogSystem.cs @@ -8,18 +8,19 @@ namespace GFramework.Game.assets; public interface IAssetCatalogSystem : ISystem { /// - /// 根据指定的键获取游戏单位ID + /// 根据指定的键获取场景单元标识符 /// - /// 用于查找游戏单位的键值 - /// 返回对应的游戏单位ID,如果未找到则返回默认值 - AssetCatalog.GameUnitId GetGameUnit(string key); + /// 用于查找场景单元的键值 + /// 返回与指定键对应的场景单元标识符 + AssetCatalog.SceneUnitId GetSceneUnit(string key); /// - /// 根据指定的键获取模板ID + /// 根据指定的键获取场景页面标识符 /// - /// 用于查找模板的键值 - /// 返回对应的模板ID,如果未找到则返回默认值 - AssetCatalog.TemplateId GetTemplate(string key); + /// 用于查找场景页面的键值 + /// 返回与指定键对应的场景页面标识符 + AssetCatalog.ScenePageId GetScenePage(string key); + /// /// 根据指定的键获取资源ID @@ -29,57 +30,63 @@ public interface IAssetCatalogSystem : ISystem AssetCatalog.AssetId GetAsset(string key); /// - /// 注册游戏单位资源到资产目录中 + /// 注册场景单元到资产目录中 /// - /// 游戏单位的唯一标识键值 - /// 游戏单位资源的路径 - void RegisterGameUnit(string key, string path); - + /// 场景单元的唯一标识键 + /// 场景单元资源的路径 + /// 当指定的键已存在时抛出异常 + public void RegisterSceneUnit(string key, string path); + /// - /// 根据映射配置注册游戏单位资源到资产目录中 + /// 通过资产目录映射注册场景单元 /// - /// 包含键值和路径映射关系的配置对象 - void RegisterGameUnit(AssetCatalog.AssetCatalogMapping mapping); - + /// 包含场景单元信息的资产目录映射对象 + /// 当映射ID不是SceneUnitId类型或键已存在时抛出异常 + public void RegisterSceneUnit(AssetCatalog.AssetCatalogMapping mapping); + /// - /// 注册模板资源到资产目录中 + /// 注册场景页面模板 /// - /// 模板的唯一标识键值 - /// 模板资源的路径 - void RegisterTemplate(string key, string path); - + /// 场景页面的唯一标识键 + /// 场景页面资源路径 + /// 当键已存在时抛出异常 + void RegisterScenePage(string key, string path); + /// - /// 根据映射配置注册模板资源到资产目录中 + /// 通过资产目录映射注册场景页面 /// - /// 包含键值和路径映射关系的配置对象 - void RegisterTemplate(AssetCatalog.AssetCatalogMapping mapping); - + /// 包含场景页面信息的资产目录映射对象 + /// 当映射ID不是ScenePageId类型或键已存在时抛出异常 + void RegisterScenePage(AssetCatalog.AssetCatalogMapping mapping); + /// /// 注册普通资产资源到资产目录中 /// /// 资产的唯一标识键值 /// 资产资源的路径 void RegisterAsset(string key, string path); - + /// /// 根据映射配置注册普通资产资源到资产目录中 /// /// 包含键值和路径映射关系的配置对象 void RegisterAsset(AssetCatalog.AssetCatalogMapping mapping); - - /// - /// 检查是否存在指定键的游戏单位 - /// - /// 用于查找游戏单位的键值 - /// 存在返回true,否则返回false - bool HasGameUnit(string key); + /// - /// 检查是否存在指定键的模板 + /// 检查是否存在指定键的场景单元 /// - /// 用于查找模板的键值 + /// 用于查找场景单元的键值 /// 存在返回true,否则返回false - bool HasTemplate(string key); + bool HasSceneUnit(string key); + + + /// + /// 检查是否存在指定键的场景页面 + /// + /// 用于查找场景页面的键值 + /// 存在返回true,否则返回false + bool HasScenePage(string key); /// /// 检查是否存在指定键的资源 @@ -88,4 +95,4 @@ public interface IAssetCatalogSystem : ISystem /// 存在返回true,否则返回false bool HasAsset(string key); -} +} \ No newline at end of file diff --git a/GFramework.Godot/assets/AbstractResourceFactorySystem.cs b/GFramework.Godot/assets/AbstractResourceFactorySystem.cs index afbeab4..2f23a57 100644 --- a/GFramework.Godot/assets/AbstractResourceFactorySystem.cs +++ b/GFramework.Godot/assets/AbstractResourceFactorySystem.cs @@ -81,7 +81,7 @@ public abstract class AbstractResourceFactorySystem : AbstractSystem, IResourceF bool preload = false) where T : Node { - var id = _assetCatalogSystem!.GetGameUnit(sceneKey); + var id = _assetCatalogSystem!.GetSceneUnit(sceneKey); _registry!.Register( sceneKey, @@ -101,7 +101,7 @@ public abstract class AbstractResourceFactorySystem : AbstractSystem, IResourceF bool preload = false) where T : Node { - var id = _assetCatalogSystem!.GetTemplate(templateKey); + var id = _assetCatalogSystem!.GetScenePage(templateKey); _registry!.Register( templateKey, diff --git a/GFramework.Godot/assets/IResourceLoadSystem.cs b/GFramework.Godot/assets/IResourceLoadSystem.cs index 57b050d..81b1a96 100644 --- a/GFramework.Godot/assets/IResourceLoadSystem.cs +++ b/GFramework.Godot/assets/IResourceLoadSystem.cs @@ -39,7 +39,7 @@ public interface IResourceLoadSystem : ISystem /// 场景资源标识符 /// 创建场景实例的工厂函数 Func GetOrRegisterGameUnitFactory( - AssetCatalog.GameUnitId id + AssetCatalog.SceneUnitId id ) where T : Node; /// @@ -49,7 +49,7 @@ public interface IResourceLoadSystem : ISystem /// 模板资源标识符 /// 创建模板实例的工厂函数 Func GetOrRegisterTemplateFactory( - AssetCatalog.TemplateId id + AssetCatalog.ScenePageId id ) where T : Node; /// diff --git a/GFramework.Godot/assets/ResourceLoadSystem.cs b/GFramework.Godot/assets/ResourceLoadSystem.cs index 8daaaad..204ef44 100644 --- a/GFramework.Godot/assets/ResourceLoadSystem.cs +++ b/GFramework.Godot/assets/ResourceLoadSystem.cs @@ -99,7 +99,7 @@ public class ResourceLoadSystem : AbstractSystem, IResourceLoadSystem return scene.Instantiate(); } - public Func GetOrRegisterGameUnitFactory(AssetCatalog.GameUnitId id) where T : Node + public Func GetOrRegisterGameUnitFactory(AssetCatalog.SceneUnitId id) where T : Node { var path = id.Path; if (_sceneFactories.TryGetValue(path, out var d)) @@ -119,7 +119,7 @@ public class ResourceLoadSystem : AbstractSystem, IResourceLoadSystem return factory; } - public Func GetOrRegisterTemplateFactory(AssetCatalog.TemplateId id) where T : Node + public Func GetOrRegisterTemplateFactory(AssetCatalog.ScenePageId id) where T : Node { var path = id.Path; if (_sceneFactories.TryGetValue(path, out var d))