Exemple #1
0
 private void OnLoadJobFinished(AssetBundleLoadJob job)
 {
     if (assetBundleDownloadQueue.ContainsKey(job.BundleInfo.bundleId))
     {
         LoadNextJob(job.BundleInfo.bundleId);
     }
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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();
                }
            }
        }
Exemple #4
0
        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)));
                }));
            }
        }