using System.IO; using System.Threading.Tasks; using UnityEngine; namespace Model { [ObjectEvent] public class AssetsBundleLoaderAsyncEvent : ObjectEvent, IUpdate { public void Update() { this.Get().Update(); } } public class AssetsBundleLoaderAsync : Disposer, IUpdate { private AssetBundleCreateRequest request; private TaskCompletionSource tcs; public void Update() { if (!this.request.isDone) { return; } TaskCompletionSource t = tcs; t.SetResult(this.request.assetBundle); } public override void Dispose() { if (this.Id == 0) { return; } base.Dispose(); } public Task LoadAsync(string bundleName) { this.tcs = new TaskCompletionSource(); this.request = AssetBundle.LoadFromFileAsync(Path.Combine(PathHelper.AppHotfixResPath, bundleName)); return this.tcs.Task; } } }