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}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|