using System.Collections.Generic; using Cysharp.Threading.Tasks; using GameFramework.Resource; using SepCore.AsyncTask; using SepCore.CustomUtility; using SepCore.Definition; using UnityEngine; using UnityGameFramework.Runtime; namespace SepCore.SpriteCache { public class SpriteCacheComponent : GameFrameworkComponent { [SerializeField] private float _pixelsPerUnit = 100f; [SerializeField] private Vector2 _defaultPivot = new(0.5f, 0.5f); private Dictionary _spriteCache; private ResourceComponent _resource; void Start() { _spriteCache = new Dictionary(); _resource = GameEntry.Resource; } public async UniTask GetSprite(string assetName) { if (_spriteCache.TryGetValue(assetName, out var sprite)) return sprite; var texture = await _resource.LoadAssetAsync( AssetUtility.GetUITextureIconAsset(assetName), Constant.AssetPriority.UIFormAsset); var newSprite = Sprite.Create( texture, new Rect(0, 0, texture.width, texture.height), _defaultPivot, _pixelsPerUnit); _spriteCache.TryAdd(assetName, newSprite); return newSprite; } private void OnDestroy() { _spriteCache.Clear(); _resource = null; } } }