using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
using YooAsset;
namespace TEngine
{
///
/// 资源管理器接口。
///
public interface IResourceModule
{
///
/// 获取当前资源适用的游戏版本号。
///
string ApplicableGameVersion { get; }
///
/// 获取当前内部资源版本号。
///
int InternalResourceVersion { get; }
///
/// 获取或设置运行模式。
///
EPlayMode PlayMode { get; set; }
///
/// 资源加密方式。
///
EncryptionType EncryptionType { get; set; }
///
/// 是否边玩边下载。
///
bool UpdatableWhilePlaying { get; set; }
///
/// 同时下载的最大数目。
///
int DownloadingMaxNum { get; set; }
///
/// 失败重试最大数目。
///
int FailedTryAgain { get; set; }
///
/// 初始化接口。
///
void Initialize();
///
/// 初始化操作。
///
/// 资源包名称。
UniTask InitPackage(string customPackageName);
///
/// 默认资源包名称。
///
string DefaultPackageName { get; set; }
///
/// 获取或设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)。
///
long Milliseconds { get; set; }
///
/// 热更链接URL。
///
string HostServerURL { get; set; }
///
/// 备用热更URL。
///
string FallbackHostServerURL { get; set; }
///
/// 获取或设置资源对象池自动释放可释放对象的间隔秒数。
///
float AssetAutoReleaseInterval { get; set; }
///
/// 获取或设置资源对象池的容量。
///
int AssetCapacity { get; set; }
///
/// 获取或设置资源对象池对象过期秒数。
///
float AssetExpireTime { get; set; }
///
/// 获取或设置资源对象池的优先级。
///
int AssetPriority { get; set; }
///
/// 卸载资源。
///
/// 要卸载的资源。
void UnloadAsset(object asset);
///
/// 资源回收(卸载引用计数为零的资源)
///
void UnloadUnusedAssets();
///
/// 强制回收所有资源
///
void ForceUnloadAllAssets();
///
/// 强制执行释放未被使用的资源。
///
/// 是否使用垃圾回收。
void ForceUnloadUnusedAssets(bool performGCCollect);
///
/// 检查资源是否存在。
///
/// 资源定位地址。
/// 资源包名称。
/// 检查资源是否存在的结果。
public HasAssetResult HasAsset(string location, string packageName = "");
///
/// 检查资源定位地址是否有效。
///
/// 资源的定位地址
/// 指定资源包的名称。不传使用默认资源包
bool CheckLocationValid(string location, string packageName = "");
///
/// 获取资源信息列表。
///
/// 资源标签。
/// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
AssetInfo[] GetAssetInfos(string resTag, string packageName = "");
///
/// 获取资源信息列表。
///
/// 资源标签列表。
/// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
AssetInfo[] GetAssetInfos(string[] tags, string packageName = "");
///
/// 获取资源信息。
///
/// 资源的定位地址。
/// 指定资源包的名称。不传使用默认资源包
/// 资源信息。
AssetInfo GetAssetInfo(string location, string packageName = "");
///
/// 异步加载资源。
///
/// 资源的定位地址。
/// 加载资源的优先级。
/// 加载资源回调函数集。
/// 用户自定义数据。
/// 指定资源包的名称。不传使用默认资源包。
void LoadAssetAsync(string location, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData, string packageName = "");
///
/// 异步加载资源。
///
/// 资源的定位地址。
/// 要加载的资源类型。
/// 加载资源的优先级。
/// 加载资源回调函数集。
/// 用户自定义数据。
/// 指定资源包的名称。不传使用默认资源包。
void LoadAssetAsync(string location, Type assetType, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData, string packageName = "");
///
/// 同步加载资源。
///
/// 资源的定位地址。
/// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
T LoadAsset(string location, string packageName = "") where T : UnityEngine.Object;
///
/// 同步加载游戏物体并实例化。
///
/// 资源的定位地址。
/// 资源实例父节点。
/// 指定资源包的名称。不传使用默认资源包
/// 资源实例。
/// 会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。
GameObject LoadGameObject(string location, Transform parent = null, string packageName = "");
///
/// 异步加载资源。
///
/// 资源的定位地址。
/// 回调函数。
/// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
UniTaskVoid LoadAsset(string location, Action callback, string packageName = "") where T : UnityEngine.Object;
///
/// 同步加载子资源对象。
///
/// 资源类型。
/// 资源的定位地址。
/// 指定资源包的名称。不传使用默认资源包
public TObject[] LoadSubAssetsSync(string location, string packageName = "") where TObject : UnityEngine.Object;
///
/// 异步加载子资源对象。
///
/// 资源类型。
/// 资源的定位地址。
/// 指定资源包的名称。不传使用默认资源包
public UniTask LoadSubAssetsAsync(string location, string packageName = "") where TObject : UnityEngine.Object;
///
/// 异步加载资源。
///
/// 资源定位地址。
/// 取消操作Token。
/// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 异步资源实例。
UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default, string packageName = "") where T : UnityEngine.Object;
///
/// 异步加载游戏物体并实例化。
///
/// 资源定位地址。
/// 资源实例父节点。
/// 取消操作Token。
/// 指定资源包的名称。不传使用默认资源包
/// 异步游戏物体实例。
/// 会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。
UniTask LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default, string packageName = "");
///
/// 获取同步加载的资源操作句柄。
///
/// 资源定位地址。
/// 资源包名称。
/// 资源类型。
/// 资源操作句柄。
AssetHandle LoadAssetSyncHandle(string location, string packageName = "") where T : UnityEngine.Object;
///
/// 获取异步加载的资源操作句柄。
///
/// 资源定位地址。
/// 资源包名称。
/// 资源类型。
/// 资源操作句柄。
AssetHandle LoadAssetAsyncHandle(string location, string packageName = "") where T : UnityEngine.Object;
///
/// 清理包裹未使用的缓存文件。
///
/// 文件清理方式。
/// 指定资源包的名称。不传使用默认资源包
ClearCacheFilesOperation ClearCacheFilesAsync(
EFileClearMode clearMode = EFileClearMode.ClearUnusedBundleFiles, string customPackageName = "");
///
/// 清理沙盒路径。
///
/// 指定资源包的名称。不传使用默认资源包
void ClearAllBundleFiles(string customPackageName = "");
///
/// 资源下载器,用于下载当前资源版本所有的资源包文件。
///
ResourceDownloaderOperation Downloader { get; set; }
///
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件。
///
/// 指定资源包的名称。不传使用默认资源包
ResourceDownloaderOperation CreateResourceDownloader(string customPackageName = "");
///
/// 当前最新的包裹版本。
///
string PackageVersion { set; get; }
///
/// 获取当前资源包版本。
///
/// 指定资源包的名称。不传使用默认资源包
/// 资源包版本。
string GetPackageVersion(string customPackageName = "");
///
/// 异步更新最新包的版本。
///
/// 请求URL是否需要带时间戳。
/// 超时时间。
/// 指定资源包的名称。不传使用默认资源包
/// 请求远端包裹的最新版本操作句柄。
RequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks = false, int timeout = 60, string customPackageName = "");
///
/// 向网络端请求并更新清单
///
/// 更新的包裹版本
/// 超时时间(默认值:60秒)
/// 指定资源包的名称。不传使用默认资源包
UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout = 60, string customPackageName = "");
///
/// 设置远程服务Url。
///
/// 默认远端资源地址。
/// 备用远端资源地址。
void SetRemoteServicesUrl(string defaultHostServer, string fallbackHostServer);
///
/// 低内存行为。
///
void OnLowMemory();
///
/// 低内存回调保护。
///
/// 低内存行为。
void SetForceUnloadUnusedAssetsAction(Action action);
}
}