Net.Like.Xue.Tokyo/Assets/Plugins/Character Controller Pro/Utilities/Scripts/CustomClassDrawerEditor.cs

175 lines
4.7 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
namespace Lightbug.Utilities
{
[CustomPropertyDrawer(typeof(CustomClassDrawer), true)]
public class CustomClassDrawerEditor : PropertyDrawer
{
Color fontColor = new Color(0.15f, 0.15f, 0.15f);
Color arrowColor = new Color(0.15f, 0.15f, 0.15f, 0.75f);
GUIStyle textStyle = new GUIStyle();
const float TitleHeight = 19;
const float PostTitleSpace = 0;
const float RightSpace = 1;
const float ArrowMargin = 5;
const float isEnabledWidth = 20;
public override bool CanCacheInspectorGUI(SerializedProperty property)
{
return false;
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
float space = 0;
if (property.isExpanded)
{
space = 1.2f * EditorGUI.GetPropertyHeight(property) + TitleHeight;
}
else
{
space = TitleHeight;
}
return space;
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SetColors();
textStyle.normal.textColor = fontColor;
textStyle.alignment = TextAnchor.MiddleLeft;
int initialIndent = EditorGUI.indentLevel;
float initialfieldWidth = EditorGUIUtility.fieldWidth;
float initialLabelWidth = EditorGUIUtility.labelWidth;
EditorGUI.indentLevel = 0;
EditorGUIUtility.fieldWidth = 60;
Rect referenceRect = position;
referenceRect.height = TitleHeight;
Rect backgroundRect = position;
backgroundRect.position = referenceRect.position;
backgroundRect.width -= RightSpace;
GUI.color = new Color(1f, 1f, 1f, 0.6f);
GUI.Box(backgroundRect, GUIContent.none, EditorStyles.helpBox); // (GUIStyle)"IN ThumbnailShadow" );
GUI.color = Color.white;
Rect titleRect = referenceRect;
titleRect.width -= isEnabledWidth;
titleRect.x += 7f;
// if( GUI.Button( titleRect , GUIContent.none , EditorStyles.label ) )
// property.isExpanded = !property.isExpanded;
property.isExpanded = true;
GUI.Label(titleRect, property.displayName, textStyle);
// Rect arrowRect = referenceRect;
// arrowRect.width = 0.5f * referenceRect.height;
// arrowRect.height = arrowRect.width;
// arrowRect.x += ArrowMargin;
// arrowRect.y += referenceRect.height / 2 - arrowRect.height / 2;
// Texture arrowTexture = Resources.Load<Texture>("Icons/whiteArrowFilledIcon");
// if( property.isExpanded )
// GUIUtility.RotateAroundPivot( 90 , arrowRect.center );
// GUI.color = arrowColor;
// GUI.DrawTexture( arrowRect , arrowTexture );
// GUI.color = Color.white;
// if( property.isExpanded )
// GUIUtility.RotateAroundPivot( -90 , arrowRect.center );
if (property.isExpanded)
{
EditorGUI.indentLevel = 1;
SerializedProperty itr = property.Copy();
bool enterChildren = true;
Rect childRect = referenceRect;
childRect.y += 2 * EditorGUIUtility.singleLineHeight + PostTitleSpace;
childRect.height = EditorGUIUtility.singleLineHeight;
childRect.width -= 10;
while (itr.NextVisible(enterChildren))
{
enterChildren = false;
if (SerializedProperty.EqualContents(itr, property.GetEndProperty()))
break;
EditorGUI.PropertyField(childRect, itr);
childRect.y += 1.2f * EditorGUI.GetPropertyHeight(itr, null, false);
}
}
EditorGUI.indentLevel = initialIndent;
EditorGUIUtility.fieldWidth = initialfieldWidth;
EditorGUIUtility.labelWidth = initialLabelWidth;
EditorGUI.EndProperty();
}
void SetColors()
{
if (EditorGUIUtility.isProSkin)
{
fontColor = new Color(0.75f, 0.75f, 0.75f);
arrowColor = new Color(0.75f, 0.75f, 0.75f, 0.75f);
}
else
{
fontColor = Color.black;
arrowColor = new Color(0.15f, 0.15f, 0.15f, 0.75f);
}
}
}
}
#endif