vampire-like/Assets/GameMain/Scripts/Runtime/CustomComponent/SpriteCache/SpriteCacheComponent.cs

51 lines
1.5 KiB
C#

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<string, Sprite> _spriteCache;
private ResourceComponent _resource;
void Start()
{
_spriteCache = new Dictionary<string, Sprite>();
_resource = GameEntry.Resource;
}
public async UniTask<Sprite> GetSprite(string assetName)
{
if (_spriteCache.TryGetValue(assetName, out var sprite))
return sprite;
var texture = await _resource.LoadAssetAsync<Texture2D>(
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;
}
}
}