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) .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(AssetDatabase.GUIDToAssetPath(scriptGuid)); if (script != null && constraintTypes.Contains(script.GetClass())) { EditorGUIUtility.SetIconForObject(script, icon); } } } } }