/// <summary> /// 停止加载 /// </summary> /// <param name="item"></param> public void StopLoad(LoadItem item) { // 移除加载字典 if (_loadDict.ContainsKey(item.url)) { _loadDict.Remove(item.url); } // 移除加载优先级字典 _loadListDict[(int)item.priority].Remove(item); // 移除当前加载器字典 ILoader loader; if (_currentLoaders.TryGetValue(item.url, out loader)) { _currentLoaders.Remove(item.url); loader.Dispose(); } }
private void LoadNext() { // 判断是否已达到最大加载限制 if (_currentLoaders.Count >= _maxLoaders) { return; } // 遍历加载列表 for (int i = (int)LoadPriority.LV_FIRST; i <= (int)LoadPriority.LV_4; i++) { List <LoadItem> items = _loadListDict[i]; while (items.Count > 0) { // 取出加载队列中最早的加载项,执行加载 LoadItem item = items[0]; items.RemoveAt(0); // 判断内存中是否已存在资源 IAsset asset = App.assetManager.GetAsset(item.id); // 已存在资源则结束加载 if (asset != null) { EndLoad(item, asset); } else { // 开始加载 StartLoad(item); // 判断是否已达到最大加载限制 if (_currentLoaders.Count >= _maxLoaders) { return; } } } } }
private void OnItemProgress(LoadItem item) { _currentItem = item; SetLoadItemProgress(item); float totalProgress = 0f; foreach (LoadItem loadItem in _items) { totalProgress += loadItem.progress; } _progress = totalProgress / _items.Count; if (_progressCallback != null) { _progressCallback.Invoke(this); } if (_dispatchEvent) { DispatchEvent(ResourceManagerEventArgs.QUEUE_PROGRESS, this); } }
/// <summary> /// 加载资源 /// </summary> /// <param name="item"></param> /// <returns></returns> public LoadItem Load(LoadItem item) { if (item == null) { return(null); } // 判断内存中是否存在该资源 IAsset asset = App.assetManager.GetAsset(item.id); if (asset != null) { item.asset = asset; if (item.completeCallback != null) { item.completeCallback.Invoke(item); } return(item); } // 判断是否为ab包 if (item.loadImmediately && item.isAssetBundle && item.type != LoadType.AUDIO_ASSET_BUNDLE) { asset = LoadAssetFromAssetBundle(item.url, item.id, item.type, item.cache); if (asset != null) { item.asset = asset; // 执行加载完成回调 if (item.completeCallback != null) { item.completeCallback.Invoke(item); } return(item); } } // 判断内存中是否存在 if (App.fileManager.FileExistsPersistent(item.url)) { item.priority = LoadPriority.LV_FIRST; } // 内存中不存在则开始加载资源 LoadItem loadItem; if (_loadDict.TryGetValue(item.url, out loadItem) == false) { // 加载队列中未存在该加载项 _loadDict[item.url] = item; _loadListDict[(int)item.priority].Add(item); } else { // 加载队列中已存在该加载项 if (item.priority != loadItem.priority) { // 重新设置加载优先级 _loadListDict[(int)loadItem.priority].Remove(loadItem); _loadListDict[(int)item.priority].Add(loadItem); loadItem.priority = item.priority; } // 添加加载回调 loadItem.completeCallback += item.completeCallback; loadItem.errorCallback += item.errorCallback; loadItem.progressCallback += item.progressCallback; } // 继续执行加载 LoadNext(); return(loadItem); }
/// <summary> /// 是否正在加载 /// </summary> /// <param name="item"></param> /// <returns></returns> public bool IsLoading(LoadItem item) { return(_loadDict.ContainsKey(item.url)); }
/// <summary> /// 移除加载回调 /// </summary> /// <param name="item"></param> public void RemoveLoadCallbackImmediately(LoadItem item) { RemoveLoadCallbackImmediately(item.url, item.completeCallback, item.progressCallback, item.errorCallback); }
/// <summary> /// 立即加载资源 /// </summary> /// <param name="item"></param> /// <returns></returns> public LoadItem LoadImmediately(LoadItem item) { if (item == null) { return(null); } // 判断内存中是否存在该资源 IAsset asset = App.assetManager.GetAsset(item.id); if (asset != null) { item.asset = asset; if (item.completeCallback != null) { item.completeCallback.Invoke(item); } return(item); } // 判断是否为ab包 if (item.loadImmediately && item.isAssetBundle && item.type != LoadType.AUDIO_ASSET_BUNDLE) { asset = LoadAssetFromAssetBundle(item.url, item.id, item.type, item.cache); if (asset != null) { item.asset = asset; // 执行加载完成回调 if (item.completeCallback != null) { item.completeCallback.Invoke(item); } return(item); } } // 内存中不存在则开始加载资源 LoadItem loadItem; if (_immediateDict.TryGetValue(item.url, out loadItem) == false) { // 加载队列中未存在该加载项 _immediateDict[item.url] = item; // 设置加载项开始加载 item.isLoading = true; // 创建加载器 //string urlAbsolute; //// 判断是否从Persistent目录加载 //if (App.fileManager.FileExistsPersistent(item.url)) // urlAbsolute = new StringBuilder(App.pathManager.persistentDataPathWWW).Append(item.url).ToString(); //else // urlAbsolute = new StringBuilder(App.pathManager.externalPath).Append(item.url).ToString(); ILoader loader = LoaderFactory.CreateLoader(item.url, null, item.type); item.loader = loader; // 设置加载回调 loader.completeCallback = LoadCompleteImmediately; loader.progressCallback = LoadProgressImmediately; loader.errorCallback = LoadErrorImmediately; // 开始加载 loader.Start(); } else { // 加载队列中已存在该加载项 loadItem.completeCallback += item.completeCallback; loadItem.errorCallback += item.errorCallback; loadItem.progressCallback += item.progressCallback; } return(loadItem); }
public ResourceManagerEventArgs(string type, LoadItem loadItem) { _type = type; _loadItem = loadItem; }
private void LoadErrorCallback(LoadItem item) { _state = AudioState.UNLOAD; }