/// <summary> /// 加载下一个,如果没有下一个,则完成本次队列加载 /// </summary> /// <returns></returns> private bool LoadNext() { if (_currLoadIndex < _loaders.Count) { currLoader = _loaders[_urls[_currLoadIndex]]; if (cacheMemory || !currLoader.urlLoader.HasNewVersion()) //需要缓存内存或者还没有加载 { currLoader.urlLoader.onLoadComplete.AddEventListener(OnOneLoadCompleteHandler); currLoader.urlLoader.onLoadError.AddEventListener(OnOneLoadErrorHandler); FrameCall.DelayFrame(() =>//留一帧时间缓冲 { currLoader.urlLoader.Load(); }); } else { OnOneLoadCompleteHandler(currLoader.urlLoader); } return(true); } else { isLoading = false; onCompleteSignal.Dispatch(this); return(false); } }
/// <summary> /// 某一个加载出错,如果在重试次数之内,则重新再次加载,否则抛出队列加载出错事件,终止本次加载(除非IgnoreError) /// </summary> /// <param name="obj"></param> private void OnOneLoadErrorHandler(ILoader obj) { if (currLoader.currRetry < currLoader.maxRetry) { currLoader.currRetry++; LoadNext(); } else if (ignoreError) { if (!cacheMemory) { _loaders[_urls[_currLoadIndex]] = null; } if (_progressFrameCall != null) { _progressFrameCall.Run(); } _progressFrameCall = null; _currLoadIndex++; LoadNext(); } else { OnOneEndHandler(obj); isLoading = false; onErrorSignal.Dispatch(this); } }
/// <summary> /// 某一个加载完成,尝试加载下一个资源 /// </summary> /// <param name="obj"></param> private void OnOneLoadCompleteHandler(ILoader obj) { if (!cacheMemory) { _loaders[_urls[_currLoadIndex]] = null; } if (_progressFrameCall != null) { _progressFrameCall.Run(); } _progressFrameCall = null; OnOneEndHandler(obj); _currLoadIndex++; LoadNext(); }
/// <summary> /// 开始对add的资源进行加载 /// </summary> public void Load() { isLoading = true; bool hasNext = LoadNext(); if (hasNext) { _progressInOne = 1f / _loaders.Count; if (_progressFrameCall != null) { _progressFrameCall.Run(); } _progressFrameCall = FrameCall.Call(ScheduleUpdate); } else { onTotalScheduleSignal.Dispatch(1); } }