diff --git a/GFramework.Core.Godot/system/AbstractAssetCatalogSystem.cs b/GFramework.Core.Godot/system/AbstractAssetCatalogSystem.cs index bc91f9a..1defc80 100644 --- a/GFramework.Core.Godot/system/AbstractAssetCatalogSystem.cs +++ b/GFramework.Core.Godot/system/AbstractAssetCatalogSystem.cs @@ -1,4 +1,4 @@ -using GFramework.Core.system; +using GFramework.Core.system; namespace GFramework.Core.Godot.system; @@ -39,6 +39,20 @@ public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalog _scenes[key] = new AssetCatalog.SceneId(path); } + /// + /// 注册场景资源 + /// + /// 包含键和场景标识符的映射对象 + /// 当场景键已存在时抛出异常 + public void RegisterScene(AssetCatalog.AssetCatalogMapping mapping) + { + if (mapping.Id is not AssetCatalog.SceneId sceneId) + throw new InvalidOperationException("Mapping ID is not a SceneId"); + + if (!_scenes.TryAdd(mapping.Key, sceneId)) + throw new InvalidOperationException($"Scene key duplicated: {mapping.Key}"); + } + /// /// 注册普通资源 /// @@ -53,6 +67,20 @@ public abstract class AbstractAssetCatalogSystem : AbstractSystem, IAssetCatalog _resources[key] = new AssetCatalog.ResourceId(path); } + /// + /// 注册普通资源 + /// + /// 包含键和资源标识符的映射对象 + /// 当资源键已存在时抛出异常 + public void RegisterResource(AssetCatalog.AssetCatalogMapping mapping) + { + if (mapping.Id is not AssetCatalog.ResourceId resourceId) + throw new InvalidOperationException("Mapping ID is not a ResourceId"); + + if (!_resources.TryAdd(mapping.Key, resourceId)) + throw new InvalidOperationException($"Resource key duplicated: {mapping.Key}"); + } + #endregion #region Query(对外)