using GFramework.Core.Abstractions.Utility;
namespace GFramework.Core.Abstractions.Resource;
///
/// 资源管理器接口,提供资源加载、缓存和卸载功能
/// 线程安全:所有方法都是线程安全的
///
public interface IResourceManager : IUtility
{
///
/// 获取已加载资源的数量
///
int LoadedResourceCount { get; }
///
/// 同步加载资源
///
/// 资源类型
/// 资源路径
/// 资源实例,如果加载失败返回 null
T? Load(string path) where T : class;
///
/// 异步加载资源
///
/// 资源类型
/// 资源路径
/// 资源实例,如果加载失败返回 null
Task LoadAsync(string path) where T : class;
///
/// 获取资源句柄(增加引用计数)
///
/// 资源类型
/// 资源路径
/// 资源句柄
IResourceHandle? GetHandle(string path) where T : class;
///
/// 卸载指定路径的资源
///
/// 资源路径
/// 如果成功卸载返回 true,否则返回 false
bool Unload(string path);
///
/// 卸载所有资源
///
void UnloadAll();
///
/// 检查资源是否已加载
///
/// 资源路径
/// 如果已加载返回 true,否则返回 false
bool IsLoaded(string path);
///
/// 注册资源加载器
///
/// 资源类型
/// 资源加载器
void RegisterLoader(IResourceLoader loader) where T : class;
///
/// 取消注册资源加载器
///
/// 资源类型
void UnregisterLoader() where T : class;
///
/// 预加载资源(加载但不返回)
///
/// 资源类型
/// 资源路径
Task PreloadAsync(string path) where T : class;
///
/// 获取所有已加载资源的路径
///
IEnumerable GetLoadedResourcePaths();
///
/// 设置资源释放策略
///
/// 资源释放策略
void SetReleaseStrategy(IResourceReleaseStrategy strategy);
}