コード例 #1
0
        public virtual void Update()
        {
            if (isComplete)
            {
                return;
            }

            if (!hasInit)
            {
                Init();
            }

            bool isCpt = true;

            foreach (var loader in loaders.Values)
            {
                if (loader.isComplete)
                {
                    if (!completedLoaders.Contains(loader))
                    {
                        if (loader.hasError)
                        {
                            lastError    = loader.error;
                            lastErrorUrl = loader.url;
                            errorCount++;
                        }
                        completedLoaders.Add(loader);
                        if (onOneComplete != null)
                        {
                            onOneComplete(loader);
                        }
                    }
                }
                else
                {
                    isCpt = false;
                }

                if (maxErrorCount > 0 && errorCount > maxErrorCount)
                {
                    LoaderMgr.StopLoad(loader.url, loader.version);
                    isCpt = true;
                }
            }

            if (errorCount > maxErrorCount)
            {
                Debug.LogWarningFormat("BatchLoader stopped, because load error is over maxErrorCount: {0}",
                                       maxErrorCount);
            }

            isComplete = isCpt;

            if (isCpt)
            {
                DoCompleted();
            }
        }
コード例 #2
0
 public void Dispose()
 {
     if (hasDisposed)
     {
         return;
     }
     customData  = null;
     hasDisposed = true;
     LoaderMgr.TryUnload(actualUrl, version);
 }
コード例 #3
0
        public Loader Load(string path, BKAction <string> onComplete = null,
                           bool cache = false)
        {
            var bReturn = false;

            if (string.IsNullOrEmpty(path))
            {
                bReturn = true;
                Debug.LogWarning("LocalResMgr.load, path is empty");
            }
            if (HasResource(path))
            {
                bReturn = true;
                UpdateCache(path, cache);
            }
            if (bReturn)
            {
                if (onComplete != null)
                {
                    onComplete(path);
                }
                return(null);
            }

            var file   = resourceTable.GetResourceFile(path);
            var loader = file == null?LoaderMgr.Load(path) :
                             LoaderMgr.Load(file.targetFile, file.version, file.size);

            loader.onComplete += ld =>
            {
                if (!ld.hasError)
                {
                    AddResource(path, ld.GetOrgAssetBundle(), cache);
                }

                if (onComplete != null)
                {
                    onComplete(path);
                }

                ld.Dispose();
            };

            return(loader);
        }
コード例 #4
0
        public Loader AddLoader(string url, int version = 0, int size = 0, int priority = 0, int maxRetryCount = 3)
        {
            string key = url + '_' + version.ToString();
            Loader loader;

            if (loaders.ContainsKey(key))
            {
                //for repeated url ignore diff of version
                loader = loaders[key];
                Debug.LogFormat("{0} has already in load queue", url);
            }
            else
            {
                loader = LoaderMgr.NewOrGetLoad(url, version, size, priority, maxRetryCount);
                loaders.Add(key, loader);
            }

            return(loader);
        }
コード例 #5
0
        public BatchLoader LoadWithDependencies(string path, BKAction <string> onComplete = null, bool cache = false)
        {
            if (HasResource(path))
            {
                return(null);
            }

            var batch = LoaderMgr.LoadBatch();
            var file  = resourceTable.GetResourceFile(path);

            if (file == null)
            {
                batch.AddLoader(path);
            }
            else
            {
                if (file.dependencies != null)
                {
                    foreach (var filestr in file.dependencies)
                    {
                        var file2 = resourceTable.GetResourceFile(filestr);
                        if (!HasResource(file2))
                        {
                            batch.AddLoader(file2.targetFile, file2.version, file2.size);
                        }
                    }
                }

                batch.AddLoader(file.targetFile, file.version, file.size);
            }

            if (batch.GetLoaders().Count == 0)
            {
                batch.DisposeImmediate();
                if (onComplete != null)
                {
                    onComplete(path);
                }
                return(null);
            }

            batch.onComplete += bt =>
            {
                foreach (var item in bt.GetLoaders())
                {
                    if (!item.Value.hasError)
                    {
                        AddResource(item.Key, item.Value.GetOrgAssetBundle(), cache);
                    }
                }

                if (onComplete != null)
                {
                    onComplete(path);
                }

                bt.Dispose();
            };

            return(batch);
        }