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

101 lines
3.0 KiB
C#

#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
namespace Lightbug.Utilities
{
[CustomPropertyDrawer(typeof(BooleanButtonAttribute))]
public class BooleanButtonAttributeEditor : PropertyDrawer
{
const string ENABLED_STYLE_NAME = "flow node 2";
const string DISABLED_STYLE_NAME = "flow node 0";
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
var enabledStyle = new GUIStyle(EditorStyles.miniButton);
enabledStyle.fontStyle = FontStyle.Bold;
var disabledStyle = new GUIStyle(EditorStyles.miniButton);
disabledStyle.fontStyle = FontStyle.Normal;
var textColor = disabledStyle.normal.textColor; textColor.a = 0.4f;
disabledStyle.normal.textColor = textColor;
var at = attribute as BooleanButtonAttribute;
bool useLabel = at.Label != null;
Rect fieldRect = position;
if (useLabel)
{
fieldRect.width = EditorGUIUtility.labelWidth;
EditorGUI.LabelField(fieldRect, at.Label);
fieldRect.x += fieldRect.width;
fieldRect.width = EditorGUIUtility.currentViewWidth - 36f - EditorGUIUtility.labelWidth;
}
fieldRect.width *= 0.5f;
bool value = property.boolValue;
if (at.FalseLabelFirst)
{
if (value)
{
if (GUI.Button(fieldRect, at.FalseLabel, disabledStyle))
value = false;
fieldRect.x += fieldRect.width;
GUI.Button(fieldRect, at.TrueLabel, enabledStyle);
}
else
{
GUI.Button(fieldRect, at.FalseLabel, enabledStyle);
fieldRect.x += fieldRect.width;
if (GUI.Button(fieldRect, at.TrueLabel, disabledStyle))
value = true;
}
}
else
{
if (value)
{
GUI.Button(fieldRect, at.TrueLabel, enabledStyle);
fieldRect.x += fieldRect.width;
if (GUI.Button(fieldRect, at.FalseLabel, disabledStyle))
value = false;
}
else
{
if (GUI.Button(fieldRect, at.TrueLabel, disabledStyle))
value = true;
fieldRect.x += fieldRect.width;
GUI.Button(fieldRect, at.FalseLabel, enabledStyle);
}
}
property.boolValue = value;
EditorGUI.EndProperty();
}
//public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
//{
// return 1.2f * (EditorGUIUtility.singleLineHeight + 2f);
//}
}
}
#endif