using GFramework.Core.Abstractions.system;
using GFramework.Game.assets;
using Godot;
namespace GFramework.Godot.assets;
///
/// 资源加载系统接口,提供资源和场景的加载、实例化、预加载等功能
///
public interface IResourceLoadSystem : ISystem
{
///
/// 加载指定路径的资源
///
/// 资源类型,必须继承自Resource
/// 资源路径
/// 加载的资源实例
public T? LoadResource(string path) where T : Resource;
///
/// 获取场景加载器,用于延迟加载场景
///
/// 场景路径
/// 场景的延迟加载包装器
public Lazy GetSceneLoader(string path);
///
/// 创建指定路径场景的实例
///
/// 节点类型,必须继承自Node
/// 场景路径
/// 场景实例化的节点对象
public T? CreateInstance(string path) where T : Node;
///
/// 获取或注册游戏单位工厂函数
///
/// 节点类型,必须继承自Node
/// 场景资源标识符
/// 创建场景实例的工厂函数
Func GetOrRegisterGameUnitFactory(
AssetCatalog.SceneUnitId id
) where T : Node;
///
/// 获取或注册模板资源工厂函数
///
/// 节点类型,必须继承自Node
/// 模板资源标识符
/// 创建模板实例的工厂函数
Func GetOrRegisterTemplateFactory(
AssetCatalog.ScenePageId id
) where T : Node;
///
/// 获取或注册通用资产工厂函数
///
/// 资源类型,必须继承自Resource
/// 资产资源标识符
/// 是否对原始资源进行复制操作,默认为false
/// 创建资产实例的工厂函数
Func GetOrRegisterAssetFactory(
AssetCatalog.AssetId id,
bool duplicate = false
) where T : Resource;
///
/// 预加载指定路径的多个资源
///
/// 需要预加载的资源路径集合
public void Preload(IEnumerable paths);
///
/// 卸载指定路径的资源
///
/// 需要卸载的资源路径
public void Unload(string path);
///
/// 清除所有已加载的资源
///
public void ClearAll();
}