101 lines
3.0 KiB
C#
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
|
|
|