Net.Like.Xue.Tokyo/Assets/BITKit/Core/Mod/ModService_IO.cs

44 lines
1.3 KiB
C#
Raw Normal View History

2024-11-03 16:42:23 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
namespace BITKit.Mod
{
public partial class ModService
{
public static Func<string, UniTask<object>> LoadAssetAsyncFactory;
2025-02-24 23:03:39 +08:00
public static Func<string[], UniTask<IReadOnlyList<object>>> LoadAssetsAsyncFactory;
2024-11-03 16:42:23 +08:00
2025-02-24 23:03:39 +08:00
public static async UniTask<IReadOnlyList<T>> LoadAssets<T>(params string[] tags)
{
var list = new List<T>();
foreach (var func in LoadAssetsAsyncFactory.CastAsFunc())
{
foreach (var obj in await func.Invoke(tags))
{
list.Add((T)obj);
}
}
return list;
}
2024-11-03 16:42:23 +08:00
public static async UniTask<T> LoadAsset<T>(string location) where T : class
{
2024-12-28 23:19:55 +08:00
if (LoadAssetAsyncFactory is null)
{
throw new Exception("LoadAssetAsyncFactory is null!Make sure Processor has been initialized.");
}
2024-11-03 16:42:23 +08:00
foreach (var func in LoadAssetAsyncFactory.CastAsFunc())
{
var value = await func.Invoke(location);
if (value is T value1)
{
return value1;
}
}
throw new Exception($"Asset not found: {location}");
}
}
}