AlicizaX/Client/Packages/com.alicizax.unity.resource/Runtime/Resource/Extension/Implement/SetSpriteObject.cs

117 lines
3.1 KiB
C#
Raw Normal View History

2025-01-23 19:06:48 +08:00
using System;
2025-04-28 19:45:45 +08:00
using System.Threading;
using AlicizaX;
2025-01-23 19:06:48 +08:00
using UnityEngine;
using UnityEngine.UI;
using Object = UnityEngine.Object;
#if ODIN_INSPECTOR
using Sirenix.OdinInspector;
#endif
namespace AlicizaX.Resource.Runtime
{
[Serializable]
public class SetSpriteObject : ISetAssetObject
{
enum SetType
{
None,
Image,
SpriteRender,
}
#if ODIN_INSPECTOR
[ShowInInspector]
#endif
2025-04-28 19:45:45 +08:00
private SetType _setType;
2025-01-23 19:06:48 +08:00
#if ODIN_INSPECTOR
[ShowInInspector]
#endif
2025-04-28 19:45:45 +08:00
private Image _image;
2025-01-23 19:06:48 +08:00
#if ODIN_INSPECTOR
[ShowInInspector]
#endif
2025-04-28 19:45:45 +08:00
private SpriteRenderer _spriteRenderer;
2025-01-23 19:06:48 +08:00
#if ODIN_INSPECTOR
[ShowInInspector]
#endif
2025-04-28 19:45:45 +08:00
private Sprite _sprite;
2025-01-23 19:06:48 +08:00
public string Location { get; private set; }
2025-04-28 19:45:45 +08:00
private bool _setNativeSize = false;
private CancellationToken _cancellationToken;
2025-01-23 19:06:48 +08:00
public void SetAsset(Object asset)
{
2025-04-28 19:45:45 +08:00
_sprite = (Sprite)asset;
2025-01-23 19:06:48 +08:00
2025-04-28 19:45:45 +08:00
if (_cancellationToken.IsCancellationRequested)
return;
if (_image != null)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
_image.sprite = _sprite;
if (_setNativeSize)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
_image.SetNativeSize();
2025-01-23 19:06:48 +08:00
}
}
2025-04-28 19:45:45 +08:00
else if (_spriteRenderer != null)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
_spriteRenderer.sprite = _sprite;
2025-01-23 19:06:48 +08:00
}
}
public bool IsCanRelease()
{
2025-04-28 19:45:45 +08:00
if (_setType == SetType.Image)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
return _image == null || _image.sprite == null ||
(_sprite != null && _image.sprite != _sprite);
2025-01-23 19:06:48 +08:00
}
2025-04-28 19:45:45 +08:00
else if (_setType == SetType.SpriteRender)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
return _spriteRenderer == null || _spriteRenderer.sprite == null ||
(_sprite != null && _spriteRenderer.sprite != _sprite);
2025-01-23 19:06:48 +08:00
}
2025-04-28 19:45:45 +08:00
2025-01-23 19:06:48 +08:00
return true;
}
public void Clear()
{
2025-04-28 19:45:45 +08:00
_spriteRenderer = null;
_image = null;
2025-01-23 19:06:48 +08:00
Location = null;
2025-04-28 19:45:45 +08:00
_sprite = null;
_setType = SetType.None;
_setNativeSize = false;
2025-01-23 19:06:48 +08:00
}
2025-04-28 19:45:45 +08:00
public static SetSpriteObject Create(Image image, string location, bool setNativeSize = false, CancellationToken cancellationToken = default)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
SetSpriteObject item = MemoryPool.Acquire<SetSpriteObject>();
item._image = image;
item._setNativeSize = setNativeSize;
2025-01-23 19:06:48 +08:00
item.Location = location;
2025-04-28 19:45:45 +08:00
item._cancellationToken = cancellationToken;
item._setType = SetType.Image;
2025-01-23 19:06:48 +08:00
return item;
}
2025-04-28 19:45:45 +08:00
public static SetSpriteObject Create(SpriteRenderer spriteRenderer, string location, CancellationToken cancellationToken = default)
2025-01-23 19:06:48 +08:00
{
2025-04-28 19:45:45 +08:00
SetSpriteObject item = MemoryPool.Acquire<SetSpriteObject>();
item._spriteRenderer = spriteRenderer;
2025-01-23 19:06:48 +08:00
item.Location = location;
2025-04-28 19:45:45 +08:00
item._cancellationToken = cancellationToken;
item._setType = SetType.SpriteRender;
2025-01-23 19:06:48 +08:00
return item;
}
}
2025-04-28 19:45:45 +08:00
}