private void OnLoadJobFinished(AssetBundleLoadJob job) { if (assetBundleDownloadQueue.ContainsKey(job.BundleInfo.bundleId)) { LoadNextJob(job.BundleInfo.bundleId); } }
private void EnqueueJob <T>(AssetBundleLoadJob <T> job) where T : UnityEngine.Object { Queue <AssetBundleLoadJob> queue = assetBundleDownloadQueue[job.BundleInfo.bundleId]; queue.Enqueue(job); if (queue.Count == 1) { LoadNextJob(job.BundleInfo.bundleId); } }
private void LoadNextJob(string queueBundleId) { Queue <AssetBundleLoadJob> queue = assetBundleDownloadQueue[queueBundleId]; if (queue.Count > 0) { AssetBundleLoadJob job = queue.Dequeue(); object cachedAsset = job.TryGetCachedAsset(); if (cachedAsset != null) { job.Resolve(cachedAssets); } else { job.Load(); } } }
private IPromise <T> EnqueueDownload <T>(string bundleId, string assetName) where T : UnityEngine.Object { if (assetBundleDownloadQueue.ContainsKey(bundleId)) { Func <object> tryGetCachedAsset = () => { object cachedAsset; if (TryGetCachedAsset <T>(bundleId, assetName, out cachedAsset)) { return(cachedAsset); } return(null); }; AssetBundleLoadJob <T> job = null; IPromise <T> result = new Promise <T>((resolve, reject) => { job = new AssetBundleLoadJob <T>( assetBundles[bundleId], assetName, resolve, reject, tryGetCachedAsset, OnLoadJobFinished); }); EnqueueJob(job); return(result); } else { return(new Promise <T>((resolve, reject) => { reject(new ApplicationException(string.Format("Bundle id {0} not found.", bundleId))); })); } }