61 lines
2.0 KiB
C#
61 lines
2.0 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.U2D;
|
|
#if UNITY_EDITOR
|
|
using System.Reflection;
|
|
#endif
|
|
|
|
namespace Coffee.UIParticleInternal
|
|
{
|
|
/// <summary>
|
|
/// Extension methods for Sprite class.
|
|
/// </summary>
|
|
internal static class SpriteExtensions
|
|
{
|
|
#if UNITY_EDITOR
|
|
private static readonly Type s_SpriteEditorExtensionType =
|
|
Type.GetType("UnityEditor.Experimental.U2D.SpriteEditorExtension, UnityEditor")
|
|
?? Type.GetType("UnityEditor.U2D.SpriteEditorExtension, UnityEditor");
|
|
|
|
private static readonly Func<Sprite, Texture2D> s_GetActiveAtlasTextureMethod =
|
|
(Func<Sprite, Texture2D>)Delegate.CreateDelegate(typeof(Func<Sprite, Texture2D>),
|
|
s_SpriteEditorExtensionType
|
|
.GetMethod("GetActiveAtlasTexture", BindingFlags.Static | BindingFlags.NonPublic));
|
|
|
|
private static readonly Func<Sprite, SpriteAtlas> s_GetActiveAtlasMethod =
|
|
(Func<Sprite, SpriteAtlas>)Delegate.CreateDelegate(typeof(Func<Sprite, SpriteAtlas>),
|
|
s_SpriteEditorExtensionType
|
|
.GetMethod("GetActiveAtlas", BindingFlags.Static | BindingFlags.NonPublic));
|
|
|
|
/// <summary>
|
|
/// Get the actual texture of a sprite in play mode or edit mode.
|
|
/// </summary>
|
|
public static Texture2D GetActualTexture(this Sprite self)
|
|
{
|
|
if (!self) return null;
|
|
|
|
var ret = s_GetActiveAtlasTextureMethod(self);
|
|
return ret ? ret : self.texture;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the active sprite atlas of a sprite in play mode or edit mode.
|
|
/// </summary>
|
|
public static SpriteAtlas GetActiveAtlas(this Sprite self)
|
|
{
|
|
if (!self) return null;
|
|
|
|
return s_GetActiveAtlasMethod(self);
|
|
}
|
|
#else
|
|
/// <summary>
|
|
/// Get the actual texture of a sprite in play mode.
|
|
/// </summary>
|
|
internal static Texture2D GetActualTexture(this Sprite self)
|
|
{
|
|
return self ? self.texture : null;
|
|
}
|
|
#endif
|
|
}
|
|
}
|