Rasagar/Library/PackageCache/com.unity.2d.tilemap/Editor/CreateTileFromPaletteAttribute.cs
2024-08-26 23:07:20 +03:00

65 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.Tilemaps;
namespace UnityEditor.Tilemaps
{
/// <summary>
/// Use this attribute to add an option to customize how Tiles are created when dragging and dropping assets to the Tile Palette.
/// </summary>
/// <remarks>
/// Append this attribute to a method that has a signature of "static TileBase CreateTile(Sprite sprite)".
/// </remarks>
/// <example>
/// <code lang="cs"><![CDATA[
/// using UnityEditor.Tilemaps;
/// using UnityEngine;
/// using UnityEngine.Tilemaps;
///
/// public class CreateBlueTile
/// {
/// [CreateTileFromPalette]
/// public static TileBase BlueTile(Sprite sprite)
/// {
/// var blueTile = ScriptableObject.CreateInstance<Tile>();
/// blueTile.sprite = sprite;
/// blueTile.name = sprite.name;
/// blueTile.color = Color.blue;
/// return blueTile;
/// }
/// }
/// ]]></code>
/// </example>
[AttributeUsage(AttributeTargets.Method)]
public class CreateTileFromPaletteAttribute : Attribute
{
private static List<MethodInfo> m_CreateTileFromPaletteMethods;
internal static List<MethodInfo> createTileFromPaletteMethods
{
get
{
if (m_CreateTileFromPaletteMethods == null)
GetCreateTileFromPaletteAttributeMethods();
return m_CreateTileFromPaletteMethods;
}
}
[RequiredSignature]
private static TileBase CreateTile(Sprite sprite)
{
return null;
}
private static void GetCreateTileFromPaletteAttributeMethods()
{
m_CreateTileFromPaletteMethods = new List<MethodInfo>();
foreach (var sortingMethod in TypeCache.GetMethodsWithAttribute<CreateTileFromPaletteAttribute>())
{
m_CreateTileFromPaletteMethods.Add(sortingMethod);
}
}
}
}