streamingle-unity-utilities/Editor/Constraints/LerpConstraintIconInstaller.cs

54 lines
1.7 KiB
C#

using System;
using System.Linq;
using Streamingle.Utils.LerpConstraints;
using UnityEditor;
using UnityEngine;
namespace Streamingle.Utils.LerpConstraintsEditor
{
[InitializeOnLoad]
internal static class LerpConstraintIconInstaller
{
private const string IconName = "LerpConstraintIcon";
static LerpConstraintIconInstaller()
{
EditorApplication.delayCall += ApplyIcons;
}
private static void ApplyIcons()
{
Texture2D icon = AssetDatabase
.FindAssets($"{IconName} t:Texture2D")
.Select(AssetDatabase.GUIDToAssetPath)
.Select(AssetDatabase.LoadAssetAtPath<Texture2D>)
.FirstOrDefault(texture => texture != null);
if (icon == null)
{
return;
}
Type[] constraintTypes =
{
typeof(LerpAimConstraint),
typeof(LerpLookAtConstraint),
typeof(LerpParentConstraint),
typeof(LerpPositionConstraint),
typeof(LerpRotationConstraint),
typeof(LerpScaleConstraint)
};
string[] scriptGuids = AssetDatabase.FindAssets("t:MonoScript", new[] { "Packages/com.streamingle.utilities/Runtime/Constraints" });
foreach (string scriptGuid in scriptGuids)
{
MonoScript script = AssetDatabase.LoadAssetAtPath<MonoScript>(AssetDatabase.GUIDToAssetPath(scriptGuid));
if (script != null && constraintTypes.Contains(script.GetClass()))
{
EditorGUIUtility.SetIconForObject(script, icon);
}
}
}
}
}