You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.5 KiB
84 lines
2.5 KiB
using UnityEngine; |
|
using UnityEditor; |
|
using System.Reflection; |
|
using System; |
|
|
|
|
|
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); |
|
} |
|
}
|
|
|