using System; using System.Collections; using System.Collections.Generic; using FairyGUI; using NBC; using UnityEngine; using UnityEngine.Networking; namespace NBF { public class XGLoader : GLoader { private static Dictionary _loaderInfo = new Dictionary(); private Texture _texture; protected override void LoadExternal() { if (LoadType() == 1) { LoadExternalSync(url); } else { Log.Info($"LoadExternal={url}"); _texture = Resources.Load(url); if (_texture != null) onExternalLoadSuccess(new NTexture(_texture)); else onExternalLoadFailed(); } } // ReSharper disable Unity.PerformanceAnalysis protected override void FreeExternal(NTexture tex) { if (LoadType() == 1) { tex.Unload(); tex.Dispose(); _loaderInfo.Remove(url); return; } if (tex.nativeTexture != null) { // Resources.UnloadAsset(_texture); } } private int LoadType() { if (!string.IsNullOrEmpty(url) && url.StartsWith("http")) { return 1; } return 0; } private void LoadExternalSync(string downloadUrl) { Game.Instance.StartCoroutine(DownloadTexture(downloadUrl)); } private IEnumerator DownloadTexture(string downloadUrl) { var www = UnityWebRequestTexture.GetTexture(downloadUrl); yield return www.SendWebRequest(); if (isDisposed) yield break; try { var texture2D = DownloadHandlerTexture.GetContent(www); if (!_loaderInfo.TryAdd(downloadUrl, texture2D)) { _loaderInfo[downloadUrl] = texture2D; } if (visible && url.Equals(downloadUrl)) { onExternalLoadSuccess(new NTexture(texture2D)); } } catch (Exception e) { Debug.LogError(e); onExternalLoadFailed(); } } } }