51 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|