44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
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;
|
|
public static Func<string[], UniTask<IReadOnlyList<object>>> LoadAssetsAsyncFactory;
|
|
|
|
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;
|
|
}
|
|
public static async UniTask<T> LoadAsset<T>(string location) where T : class
|
|
{
|
|
if (LoadAssetAsyncFactory is null)
|
|
{
|
|
throw new Exception("LoadAssetAsyncFactory is null!Make sure Processor has been initialized.");
|
|
}
|
|
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}");
|
|
}
|
|
}
|
|
}
|