using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.DataTable;
using SepCore.DataTable;
using UnityGameFramework.Runtime;
namespace SepCore.AsyncTask
{
///
/// DataTable 异步扩展方法
///
public static class DataTableAsyncExtension
{
///
/// 异步加载数据表
///
/// 数据表组件
/// 数据表资源名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 加载成功事件
public static UniTask LoadDataTableAsync(this DataTableComponent dataTableComponent,
string dataTableAssetName,
object userData = null,
float timeout = 30f)
{
UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync(
LoadDataTableSuccessEventArgs.EventId,
LoadDataTableFailureEventArgs.EventId,
successArgs => successArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName);
dataTableComponent.LoadDataTable(dataTableName, dataTableAssetName, userData);
return waitTask;
}
///
/// 异步加载数据表(泛型版本)
///
/// 数据行类型
/// 数据表组件
/// 数据表资源名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 加载的数据表
public static UniTask> LoadDataTableAsync(this DataTableComponent dataTableComponent,
string dataTableAssetName,
object userData = null,
float timeout = 30f) where T : IDataRow
{
return LoadDataTableAsync(dataTableComponent, dataTableAssetName, userData, timeout)
.ContinueWith(successArgs =>
{
// 获取数据表名称(去掉路径和扩展名)
string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName);
return dataTableComponent.GetDataTable(dataTableName);
});
}
}
}