vampire-like/Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTask/ResourceAsyncExtension.cs

83 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using Cysharp.Threading.Tasks;
using GameFramework.Resource;
using UnityGameFramework.Runtime;
using ResourceApplySuccessEventArgs = UnityGameFramework.Runtime.ResourceApplySuccessEventArgs;
using ResourceUpdateAllCompleteEventArgs = UnityGameFramework.Runtime.ResourceUpdateAllCompleteEventArgs;
using ResourceVerifySuccessEventArgs = UnityGameFramework.Runtime.ResourceVerifySuccessEventArgs;
namespace SepCore.AsyncTask
{
/// <summary>
/// Resource 异步扩展方法
/// </summary>
public static class ResourceAsyncExtension
{
/// <summary>
/// 异步加载资源
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="resourceComponent">资源组件</param>
/// <param name="assetName">资源名称</param>
/// <param name="priority">加载优先级</param>
/// <returns>加载完成的资源</returns>
public static UniTask<T> LoadAssetAsync<T>(this ResourceComponent resourceComponent, string assetName, int priority = 0)
{
var tcs = AutoResetUniTaskCompletionSource<T>.Create();
resourceComponent.LoadAsset(assetName, priority, new LoadAssetCallbacks(
(_, asset, _, _) => tcs.TrySetResult((T)asset),
(_, _, errorMessage, _) => tcs.TrySetException(new Exception(errorMessage))
));
return tcs.Task;
}
/// <summary>
/// 异步等待资源更新完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间0表示不超时</param>
/// <returns>更新完成事件</returns>
public static UniTask<ResourceUpdateAllCompleteEventArgs> WaitForResourceUpdateCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceUpdateAllCompleteEventArgs>(
ResourceUpdateAllCompleteEventArgs.EventId,
null,
timeout
);
}
/// <summary>
/// 异步等待资源验证完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间0表示不超时</param>
/// <returns>验证成功事件</returns>
public static UniTask<ResourceVerifySuccessEventArgs> WaitForResourceVerifyCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceVerifySuccessEventArgs>(
ResourceVerifySuccessEventArgs.EventId,
null,
timeout
);
}
/// <summary>
/// 异步等待资源应用完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间0表示不超时</param>
/// <returns>应用成功事件</returns>
public static UniTask<ResourceApplySuccessEventArgs> WaitForResourceApplyCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceApplySuccessEventArgs>(
ResourceApplySuccessEventArgs.EventId,
null,
timeout
);
}
}
}