You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.0 KiB
C#

/******************************************************************************/
/*
Project - MudBun
Publisher - Long Bunny Labs
http://LongBunnyLabs.com
Author - Ming-Lun "Allen" Chou
http://AllenChou.net
*/
/******************************************************************************/
using System.Collections.Generic;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
namespace MudBun
{
public class MudEditorBase : Editor
{
internal static void Header(string label)
{
EditorGUILayout.LabelField
(
new GUIContent() { text = label },
new GUIStyle("label") { fontStyle = FontStyle.Bold }
);
}
internal static void Space()
{
EditorGUILayout.Space();
}
private int m_numIndents = 0;
internal void Indent() { ++m_numIndents; }
internal void Unindent() { --m_numIndents; m_numIndents = Mathf.Max(0, m_numIndents); }
internal string LeadingSpaces
{
get
{
string leadingSpaces = " ";
for (int i = 0; i < m_numIndents; ++i)
leadingSpaces += " ";
return leadingSpaces;
}
}
internal void Property(SerializedProperty prop, string label, string tooltip = "")
{
EditorGUILayout.PropertyField
(
prop,
new GUIContent() { text = LeadingSpaces + label, tooltip = tooltip },
true
);
}
internal void Text(string text, FontStyle style = FontStyle.Normal)
{
EditorGUILayout.LabelField
(
new GUIContent() { text = LeadingSpaces + text },
new GUIStyle("label") { fontStyle = style }
);
}
private Dictionary<SerializedProperty, ReorderableList> m_listMap = new Dictionary<SerializedProperty, ReorderableList>();
internal void Array(SerializedProperty prop, string label)
{
ReorderableList list = null;
if (!m_listMap.TryGetValue(prop, out list))
{
list = new ReorderableList(prop.serializedObject, prop, true, true, true, true);
if (label.Length > 0)
{
list.drawHeaderCallback = (Rect rect) =>
{
EditorGUI.LabelField(rect, label);
};
}
else
{
list.headerHeight = 3.0f;
}
list.elementHeightCallback = (int index) =>
{
var elementProp = prop.GetArrayElementAtIndex(index);
return EditorGUI.GetPropertyHeight(elementProp, new GUIContent() { text = "" });
};
list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
{
var elementProp = prop.GetArrayElementAtIndex(index);
string elementLabel = " [" + index + "]";
EditorGUI.LabelField(rect, elementLabel);
rect.x += 30.0f;
rect.width -= 30.0f;
EditorGUI.PropertyField(rect, elementProp, new GUIContent() { text = "" });
};
m_listMap.Add(prop, list);
}
list.DoLayoutList();
}
}
}