static async ETTask <Sprite> __LoadSpriteImageAsyncInternal(this ImageLoaderComponent self, string asset_address, string subasset_name, Action <Sprite> callback) { LruCache <string, SpriteAtlasValue> cacheCls = self.m_cacheSpriteAtlas; var cached = false; if (cacheCls.TryGet(asset_address, out SpriteAtlasValue value_c)) { if (value_c.asset == null) { cacheCls.Remove(asset_address); } else { cached = true; Sprite result; var subasset_list = value_c.subasset; if (subasset_list.ContainsKey(subasset_name)) { result = subasset_list[subasset_name].asset; subasset_list[subasset_name].ref_count = subasset_list[subasset_name].ref_count + 1; value_c.ref_count++; } else { result = value_c.asset.GetSprite(subasset_name); if (result == null) { Log.Error("image not found:" + asset_address + "__" + subasset_name); callback?.Invoke(null); return(null); } if (value_c.subasset == null) { value_c.subasset = new Dictionary <string, SpriteValue>(); } value_c.subasset[subasset_name] = new SpriteValue { asset = result, ref_count = 1 }; value_c.ref_count++; } callback?.Invoke(result); return(result); } } if (!cached) { var asset = await ResourcesComponent.Instance.LoadAsync <SpriteAtlas>(asset_address); if (asset != null) { Sprite result; var sa = asset; if (cacheCls.TryGet(asset_address, out value_c)) { var subasset_list = value_c.subasset; if (subasset_list.ContainsKey(subasset_name)) { result = subasset_list[subasset_name].asset; subasset_list[subasset_name].ref_count = subasset_list[subasset_name].ref_count + 1; } else { result = value_c.asset.GetSprite(subasset_name); if (result == null) { Log.Error("image not found:" + asset_address + "__" + subasset_name); callback?.Invoke(null); return(null); } if (value_c.subasset == null) { value_c.subasset = new Dictionary <string, SpriteValue>(); } value_c.subasset[subasset_name] = new SpriteValue { asset = result, ref_count = 1 }; } } else { value_c = new SpriteAtlasValue { asset = sa, subasset = new Dictionary <string, SpriteValue>(), ref_count = 1 }; result = value_c.asset.GetSprite(subasset_name); if (result == null) { Log.Error("image not found:" + asset_address + "__" + subasset_name); callback?.Invoke(null); return(null); } if (value_c.subasset == null) { value_c.subasset = new Dictionary <string, SpriteValue>(); } value_c.subasset[subasset_name] = new SpriteValue { asset = result, ref_count = 1 }; cacheCls.Set(asset_address, value_c); } callback?.Invoke(result); return(result); } else { callback?.Invoke(null); return(null); } } callback?.Invoke(null); return(null); }
static async ETTask <Sprite> __LoadAtlasImageAsyncInternal(this ImageLoaderComponent self, string asset_address, string subasset_name, Action <Sprite> callback = null) { var cacheCls = self.m_cacheSpriteAtlas; if (cacheCls.TryGet(asset_address, out var value_c)) { if (value_c.asset == null) { cacheCls.Remove(asset_address); } else { value_c.ref_count = value_c.ref_count + 1; if (value_c.subasset.TryGetValue(subasset_name, out var result)) { value_c.subasset[subasset_name].ref_count = value_c.subasset[subasset_name].ref_count + 1; callback?.Invoke(result.asset); return(result.asset); } else { var sp = value_c.asset.GetSprite(subasset_name); if (sp == null) { Log.Error("image not found:" + subasset_name); callback?.Invoke(null); return(null); } if (value_c.subasset == null) { value_c.subasset = new Dictionary <string, SpriteValue>(); } value_c.subasset[subasset_name] = new SpriteValue { asset = sp, ref_count = 1 }; callback?.Invoke(sp); return(sp); } } } var asset = await ResourcesComponent.Instance.LoadAsync <SpriteAtlas>(asset_address); if (asset != null) { if (cacheCls.TryGet(asset_address, out var value)) { value.ref_count = value.ref_count + 1; } else { value = new SpriteAtlasValue() { asset = asset, ref_count = 1 }; cacheCls.Set(asset_address, value); } if (value.subasset.TryGetValue(subasset_name, out var result)) { value.subasset[subasset_name].ref_count = value.subasset[subasset_name].ref_count + 1; callback?.Invoke(result.asset); return(result.asset); } else { var sp = value.asset.GetSprite(subasset_name); if (sp == null) { Log.Error("image not found:" + subasset_name); callback?.Invoke(null); return(null); } if (value.subasset == null) { value.subasset = new Dictionary <string, SpriteValue>(); } value.subasset[subasset_name] = new SpriteValue { asset = sp, ref_count = 1 }; callback?.Invoke(sp); return(sp); } } callback?.Invoke(null); return(null); }