87 lines
2.5 KiB
C#

using UnityEngine;
using UnityEditor;
namespace uOSC
{
public static class EditorUtil
{
public static string GetKey(string title, string category)
{
return $"uOSC-{title}-{category}";
}
private static string GetFoldOutKey(string title)
{
return GetKey(title, "FoldOut");
}
public static bool EditorOnlyToggle(string title, string category, bool initialState)
{
var keyTitle = title.Replace(" ", "_");
var key = GetKey(keyTitle, category);
var value = EditorPrefs.GetBool(key, initialState);
var newValue = EditorGUILayout.Toggle(title, value);
if (newValue != value)
{
EditorPrefs.SetBool(key, newValue);
}
return newValue;
}
public static bool IsFoldOutOpened(string title)
{
return EditorPrefs.GetBool(GetFoldOutKey(title));
}
public static bool Foldout(string title, bool initialState)
{
var style = new GUIStyle("ShurikenModuleTitle");
style.font = new GUIStyle(EditorStyles.label).font;
style.border = new RectOffset(15, 7, 4, 4);
style.fixedHeight = 22;
style.contentOffset = new Vector2(20f, -2f);
style.margin = new RectOffset((EditorGUI.indentLevel + 1) * 16, 0, 0, 0);
var key = GetFoldOutKey(title);
bool display = EditorPrefs.GetBool(key, initialState);
var rect = GUILayoutUtility.GetRect(16f, 22f, style);
GUI.Box(rect, title, style);
var e = Event.current;
var toggleRect = new Rect(rect.x + 4f, rect.y + 2f, 13f, 13f);
if (e.type == EventType.Repaint)
{
EditorStyles.foldout.Draw(toggleRect, false, false, display, false);
}
if (e.type == EventType.MouseDown && rect.Contains(e.mousePosition))
{
EditorPrefs.SetBool(key, !display);
e.Use();
}
return display;
}
public static bool SimpleFoldout(string title, bool initialState, string additionalKey = "")
{
var key = GetFoldOutKey(title + additionalKey);
bool display = EditorPrefs.GetBool(key, initialState);
bool newDisplay = EditorGUILayout.Foldout(display, title, EditorStyles.foldoutHeader);
if (newDisplay != display) EditorPrefs.SetBool(key, newDisplay);
return newDisplay;
}
public static void DrawProperty(SerializedObject obj, string propName)
{
var prop = obj.FindProperty(propName);
if (prop == null) return;
EditorGUILayout.PropertyField(prop);
}
}
}