namespace Zinnia.Data.Type
{
using UnityEditor;
using UnityEngine;
using Zinnia.Utility;
///
/// Displays a custom inspector for a range between two floats.
///
[CustomPropertyDrawer(typeof(FloatRange))]
public class Limits2DDrawer : PropertyDrawer
{
///
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
label.tooltip = EditorHelper.GetTooltipAttribute(fieldInfo)?.tooltip ?? string.Empty;
SerializedProperty minimum = property.FindPropertyRelative("minimum");
SerializedProperty maximum = property.FindPropertyRelative("maximum");
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
int indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
float updatePositionX = position.x;
const float labelWidth = 30f;
float fieldWidth = (position.width / 3f) - labelWidth;
using (new EditorGUI.PropertyScope(position, GUIContent.none, minimum))
{
EditorGUI.LabelField(new Rect(updatePositionX, position.y, labelWidth, position.height), "Min");
updatePositionX += labelWidth;
minimum.floatValue = EditorGUI.FloatField(
new Rect(updatePositionX, position.y, fieldWidth, position.height),
minimum.floatValue);
updatePositionX += fieldWidth;
}
using (new EditorGUI.PropertyScope(position, GUIContent.none, maximum))
{
EditorGUI.LabelField(new Rect(updatePositionX, position.y, labelWidth, position.height), "Max");
updatePositionX += labelWidth;
maximum.floatValue = EditorGUI.FloatField(
new Rect(updatePositionX, position.y, fieldWidth, position.height),
maximum.floatValue);
updatePositionX += fieldWidth;
}
EditorGUI.indentLevel = indent;
}
}
}