Files
2026-06-04 10:42:23 +07:00

50 lines
1.5 KiB
C#

using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;
using System.Linq;
namespace Invector
{
[CustomPropertyDrawer(typeof(vButtonAttribute))]
public class SingletonEditor : DecoratorDrawer
{
public override void OnGUI(Rect position)
{
vButtonAttribute target = (vButtonAttribute)attribute;
if (target != null)
{
GUI.enabled = target.enabledJustInPlayMode && Application.isPlaying || !target.enabledJustInPlayMode;
Rect rect = position;
rect.height = 20;
if (GUI.Button(rect, new GUIContent(target.label, GUI.enabled ? "Call function " + target.function : "Enabled Just in Play Mode")))
{
ExecuteFunction(target);
}
GUI.enabled = true;
}
}
public override float GetHeight()
{
return 30f;
}
void ExecuteFunction(vButtonAttribute target)
{
if (target.type == null) return;
UnityEngine.Object theObject = Selection.activeGameObject.GetComponent(target.type) as UnityEngine.Object;
MethodInfo tMethod = theObject.GetType().GetMethods().FirstOrDefault(method => method.Name == target.function
&& method.GetParameters().Count() == 0);
if (tMethod != null)
{
tMethod.Invoke(theObject,null);
}
}
}
}