// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2021-12-24 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.U2D; using UnityEngine.UI; namespace G { /// /// 图标管理 /// public class IconProxy : F.GameProxy { #region Field private Dictionary _spriteAtlasDict = new Dictionary(); #endregion #region API /// /// /// /// /// public async void SetSpriteAsync(Image source, string spriteName) { if (source) { source.overrideSprite = null; var sprite = await AssetProxy.Instance.TryGetTemporaryAssetAsync(spriteName).Task; if (source) source.overrideSprite = sprite; } else source.overrideSprite = null; } /// /// /// /// /// public void SetSprite(Image source, string[] spriteInfo) { if (spriteInfo != null && spriteInfo.Length >= 2) { SetSprite(source, spriteInfo[0], spriteInfo[1]); return; } else source.overrideSprite = null; } /// /// /// /// /// /// public async void SetSprite(Image source, string spriteName, string atlasName) { if (source) { if (_spriteAtlasDict.TryGetValue(atlasName, out SpriteAtlas atlas)) { source.overrideSprite = atlas.GetSprite(spriteName); return; } else { source.overrideSprite = null; atlas = await AssetProxy.Instance.TryGetTemporaryAssetAsync(atlasName).Task; if (source && atlas) source.overrideSprite = atlas.GetSprite(spriteName); } } else source.overrideSprite = null; } /// /// /// /// /// public async void SetSprite(SpriteRenderer source, string[] spriteInfo) { if (source && spriteInfo != null && spriteInfo.Length >= 2) { if (_spriteAtlasDict.TryGetValue(spriteInfo[1], out SpriteAtlas atlas)) { source.sprite = atlas.GetSprite(spriteInfo[0]); } else { atlas = await AssetProxy.Instance.TryGetTemporaryAssetAsync(spriteInfo[1]).Task; if (source && atlas) source.sprite = atlas.GetSprite(spriteInfo[0]); } } } public void SetSpriteWithURL(Image source, string url) { if (!string.IsNullOrEmpty(url)) StartCoroutine(SetSpriteWithURLCO(source, url)); } IEnumerator SetSpriteWithURLCO(Image source, string url) { var request = UnityWebRequestTexture.GetTexture(url); yield return request.SendWebRequest(); if (string.IsNullOrEmpty(request.error)) { if (source) { var tex = DownloadHandlerTexture.GetContent(request); if (tex) { var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.one * 0.5f); source.overrideSprite = sprite; } } } } public void LoadAtlas(IList spriteAtlas) { foreach (var item in spriteAtlas) { _spriteAtlasDict.Add(item.name, item); } } #endregion #region Method public void PreLoadCommon() { } #endregion #region Unity public static IconProxy Instance => GetInstance(); #endregion } }