public void recycle() { if (runningList.Count > 0) { foreach (AssetResource resource in runningList) { if (isUseRef) { resource.release(); } AssetsManager.bindEventHandle(resource, itemComplete, false); resource.removeEventListener(EventX.PROGRESS, itemProgress); resource.removeEventListener(EventX.DISPOSE, itemComplete); } runningList.Clear(); } urlMapping.Clear(); queue.Clear(); resultActions.Clear(); running = 0; total = 0; loaded = 0; _clear(); isComplete = false; isStart = false; }
protected override void _loadImp(int priority = 0, bool progress = false, uint retryCount = 0) { this.isProgress = progress; string manifesURI = "/" + manifesKey + "/"; int len = manifesURI.Length; if (string.IsNullOrEmpty(manifesKey)) { throw new Exception("不正常"); } int index = url.IndexOf(manifesURI); manifesPrefix = url.Substring(0, index + len); dependKey = url.Substring(index + len); manifesURI = manifesKey + ".manifest"; string manifesURL = manifesPrefix + manifesKey; AssetResource resource = AssetsManager.getResource(manifesURL, manifesURI, LoaderXDataType.MANIFEST); if (progress) { resource.addEventListener(EventX.PROGRESS, progressHandle); } AssetsManager.bindEventHandle(resource, manifesHandle); resource.load(3); return; }
private void _doNext() { if (isComplete) { return; } testCount++; if (queue.Count == 0 && running == 0 && isComplete == false) { isComplete = true; Log("QuComplete"); this.simpleDispatch(EventX.COMPLETE); return; } while (queue.Count > 0 && running < threadCount) { AssetResource resource = queue.Dequeue(); runningList.Add(resource); running++; Log("QuStart: {0} {1}", running, resource.url); AssetsManager.bindEventHandle(resource, itemComplete); resource.addEventListener(EventX.DISPOSE, itemComplete); resource.addEventListener(EventX.PROGRESS, itemProgress); resource.load(retryCount, false); } }
protected override void _loadImp(int priority = 0, bool progress = false, uint retryCount = 0) { this.isProgress = progress; string manifesURI = "/" + manifesKey + "/"; int len = manifesURI.Length; if (string.IsNullOrEmpty(manifesKey)) { throw new Exception("不正常:" + _url + "\tmanifesKey:" + manifesKey); } int index = _url.IndexOf(manifesURI); manifesPrefix = _url.Substring(0, index + len); dependKey = url.Substring(index + len).ToLower(); //prefab会被转换成小写的; this._url = manifesPrefix + dependKey; string manifesURL = manifesPrefix + manifesKey; //不做除引用操作; manifestResource = AssetsManager.getResource(manifesURL, LoaderXDataType.MANIFEST); manifestResource.initManifes(manifesPrefix, manifesKey); manifestResource.isForceRemote = isForceRemote; AssetsManager.bindEventHandle(manifestResource, manifesHandle); manifestResource.load(); }
public void load(string uri) { if (this.uri == uri) { return; } this.uri = uri; if (string.IsNullOrEmpty(uri)) { return; } string url = getURL(uri); if (resource != null) { resource.release(); AssetsManager.bindEventHandle(resource, resourceHandle, false); } resource = AssetsManager.getResource(url, LoaderXDataType.ASSETBUNDLE); resource.retain(); AssetsManager.bindEventHandle(resource, resourceHandle); resource.load(); }
/** * 加载资源成功 * @param event * */ protected virtual void loadComplete(EventX e) { loader = e.target as RFLoader; AssetsManager.bindEventHandle(loader, loadComplete, false); loader.removeEventListener(EventX.CANCEL, loadCancelHandle); if (loader.checkProgress) { loader.removeEventListener(EventX.PROGRESS, progressHandle); } if (e.type == EventX.FAILED) { _data = null; this.simpleDispatch(EventX.DEPEND_READY); resourceComplete(EventX.FAILED, (string)e.data); return; } _data = e.data; if (_data == null) { _data = "_data is null"; this.simpleDispatch(EventX.DEPEND_READY); resourceComplete(EventX.FAILED, (string)_data); } else { _data = parserData(_data); this.simpleDispatch(EventX.DEPEND_READY); resourceComplete(EventX.COMPLETE); } }
public override void __dispose() { //不做除引用操作; if (manifestResource != null) { AssetsManager.bindEventHandle(manifestResource, manifesHandle, false); } if (dependenciesResource.Count > 0) { foreach (AssetResource assetResource in dependenciesResource) { assetResource.removeEventListener(EventX.DEPEND_READY, dependsHandle); AssetsManager.bindEventHandle(assetResource, dependsHandle, false); assetResource.release(); } dependenciesResource.Clear(); } if (_spriteList != null) { _spriteList = null; } if (_asset != null) { GameObject.DestroyImmediate(_asset, true); _asset = null; } base.__dispose(); }
private void completeHandle(EventX e) { isLoaded = true; AssetResource resource = e.target as AssetResource; AssetsManager.bindEventHandle(resource, completeHandle, false); if (e.type == EventX.FAILED) { return; } if (gameObject.activeSelf == false) { recycle(); return; } AudioClip clip = resource.getMainAsset() as AudioClip; if (clip != null) { _source.clip = clip; _source.loop = loop; _source.volume = _soundValue; _source.Play(); if (loop == false) { CallLater.Add(recycle, _source.clip.length); } } }
private void manifesHandle(EventX e) { AssetResource resource = e.target as AssetResource; resource.removeEventListener(EventX.PROGRESS, progressHandle); AssetsManager.bindEventHandle(resource, manifesHandle, false); if (e.type != EventX.COMPLETE) { _data = null; resourceComplete(e.type); return; } QueueLoader queueLoader = new QueueLoader(); queueLoader.retryCount = 3; queueLoader.addEventListener(EventX.COMPLETE, dependsHandle); if (isProgress) { queueLoader.addEventListener(EventX.PROGRESS, progressHandle); } assetBundleManifest = resource.data as AssetBundleManifest; string[] dependencies = assetBundleManifest.GetAllDependencies(dependKey); //Hash128 hash = assetBundleManifest.GetAssetBundleHash(dependKey); string hashValue = null; string hashKey = null; AssetResource tempResource; foreach (string dependency in dependencies) { string url = manifesPrefix + dependency; string uri = manifesKey + "/" + dependency; //Debug.Log(dependency); hashValue = assetBundleManifest.GetAssetBundleHash(dependency).ToString(); hashKey = manifesKey + "_" + hashValue; if (resourceHash128Maping.TryGetValue(hashKey, out tempResource) == false) { tempResource = AssetsManager.getResource(url, uri, LoaderXDataType.ASSETBUNDLE); resourceHash128Maping.Add(hashKey, tempResource); } /*else if (url != tempResource.url) * { * Debug.Log("redirect:" + url + " to:" + tempResource.url); * }*/ tempResource.retain(); queueLoader.add(tempResource); } queueLoader.start(); }
private void dependsHandle(EventX e) { currentProgress = 0.8f; float progress = (_totalDependCount - _needLoadedDependCount) / (float)_totalDependCount; simpleDispatch(EventX.PROGRESS, 0.7f * progress + 0.1f); AssetResource tempResource = e.target as AssetResource; AssetsManager.bindEventHandle(tempResource, dependsHandle, false); tempResource.removeEventListener(EventX.DEPEND_READY, dependsHandle); _needLoadedDependCount--; checkAllComplete(); }
public void load(string url) { isLoaded = false; AssetResource resource = null; if (AssetsManager.routerResourceDelegate != null) { resource = AssetsManager.routerResourceDelegate(url, name, "sound"); } if (resource == null) { resource = AssetsManager.getResource(url, LoaderXDataType.PREFAB); } AssetsManager.bindEventHandle(resource, completeHandle); resource.load(); }
private void resourceHandle(EventX e) { AssetResource resource = e.target as AssetResource; AssetsManager.bindEventHandle(resource, resourceHandle, false); if (e.type != EventX.COMPLETE) { return; } UpkAniVO o = resource.getMainAsset() as UpkAniVO; if (null == o) { return; } upkAniVo = o; }
private void itemComplete(EventX e) { AssetResource resource = e.target as AssetResource; AssetsManager.bindEventHandle(resource, itemComplete, false); resource.removeEventListener(EventX.PROGRESS, itemProgress); resource.removeEventListener(EventX.DISPOSE, itemComplete); runningList.Remove(resource); running--; Log("QuEnd: {0} {1},{2},{3}", running, e.type, resource.url, queue.Count); if (running < 0) { DebugX.LogError("queueLoader error runnig=" + running); } if (e.type != EventX.COMPLETE) { faildCount++; if (maxFailCount > 0 && faildCount > maxFailCount) { this.simpleDispatch(EventX.FAILED, e); } DebugX.LogWarning("QuItemFailed:" + resource.url + ":" + e.type + " faildCount:" + faildCount + "/" + maxFailCount); } preProgress = 0.0f; loaded = total - (queue.Count + running); //DebugX.Log("kk:" + (loaded) / (float)total); this.simpleDispatch(EventX.PROGRESS, loaded / (float)total); Action <EventX> action = null; string key = resource.url.ToLower(); if (resultActions.TryGetValue(key, out action)) { action(e); } _doNext(); }
protected virtual void _loadImp(int priority = 0, bool progress = false, uint retryCount = 0) { if (loader == null) { if (LoaderFactory == null) { LoaderFactory = new ResourceLoaderManager(); } loader = LoaderFactory.getLoader(this); } loader.checkProgress = progress; loader.retryCount = retryCount; AssetsManager.bindEventHandle(loader, loadComplete); if (progress) { loader.addEventListener(EventX.PROGRESS, progressHandle); } loader.addEventListener(EventX.CANCEL, loadCancelHandle); AbstractApp.coreLoaderQueue.add(loader); }
protected override void loadComplete(EventX e) { _needLoadedDependCount--; loader = e.target as RFLoader; AssetsManager.bindEventHandle(loader, loadComplete, false); loader.removeEventListener(EventX.CANCEL, loadCancelHandle); if (isProgress) { loader.removeEventListener(EventX.PROGRESS, progressHandle); } string eventType = e.type; if (eventType != EventX.COMPLETE) { _data = null; resourceComplete(EventX.FAILED, (string)e.data); return; } AssetBundle assetBundle = e.data as AssetBundle; if (assetBundle != null) { _data = assetBundle; this.simpleDispatch(EventX.DEPEND_READY); //DebugX.Log("dd:"+_url+":"+_data); checkAllComplete(); return; } else { _data = null; resourceComplete(EventX.FAILED, "assetBundle is null"); } }
private void manifesHandle(EventX e) { currentProgress = 0.1f; simpleDispatch(EventX.PROGRESS, currentProgress); if (dependenciesResource.Count > 0) { foreach (AssetResource assetResource in dependenciesResource) { assetResource.removeEventListener(EventX.DEPEND_READY, dependsHandle); AssetsManager.bindEventHandle(assetResource, dependsHandle, false); assetResource.release(); } dependenciesResource.Clear(); } AssetResource resource = e.target as AssetResource; AssetsManager.bindEventHandle(resource, manifesHandle, false); if (e.type != EventX.COMPLETE) { _data = null; resourceComplete(EventX.FAILED); return; } assetBundleManifest = resource.data as AssetBundleManifest; string[] dependencies = assetBundleManifest.GetDirectDependencies(dependKey); AssetResource tempResource; int len = _needLoadedDependCount = dependencies.Length; //增加自身 _needLoadedDependCount += 1; if (len > 0) { //DebugX.Log(dependKey + ":::::::::::::::::::::::::::::::::::::" + len); for (int i = 0; i < len; i++) { string dependency = dependencies[i]; if (dependency == dependKey) { _needLoadedDependCount--; continue; } string url = manifesPrefix + dependency; //DebugX.Log(url); tempResource = AssetsManager.getResource(url, LoaderXDataType.ASSETBUNDLE); if (dependenciesResource.Contains(tempResource)) { DebugX.Log("hasDuplicate:" + url); _needLoadedDependCount--; continue; } tempResource.retain(); dependenciesResource.Add(tempResource); AssetBundle old; string key = url.ToLower(); RFLoader.assetBundleMapping.TryGetValue(key, out old); if (old != null || tempResource.isLoaded) { //DebugX.LogWarning("has:"+url); _needLoadedDependCount--; continue; } tempResource.addEventListener(EventX.DEPEND_READY, dependsHandle); AssetsManager.bindEventHandle(tempResource, dependsHandle); tempResource.load(); } } _totalDependCount = _needLoadedDependCount; base._loadImp(0, isProgress); }