public static void GUIMinMaxCurve(GUIContent label, SerializedMinMaxCurve mmCurve, params GUILayoutOption[] layoutOptions)
{
Rect controlRect = GetControlRect(13, layoutOptions);
Rect popupRect = GetPopupRect(controlRect);
controlRect = SubtractPopupWidth(controlRect);
Rect position = PrefixLabel(controlRect, label);
MinMaxCurveState state = mmCurve.state;
switch (state)
{
case MinMaxCurveState.k_Scalar:
{
float a = FloatDraggable(controlRect, mmCurve.scalar, mmCurve.m_RemapValue, EditorGUIUtility.labelWidth);
if (!mmCurve.signedRange)
{
mmCurve.scalar.floatValue = Mathf.Max(a, 0f);
}
break;
}
case MinMaxCurveState.k_TwoScalars:
{
Rect rect4 = position;
rect4.width = (position.width - 20f) * 0.5f;
float minConstant = mmCurve.minConstant;
float maxConstant = mmCurve.maxConstant;
Rect rect = rect4;
rect.xMin -= 20f;
EditorGUI.BeginChangeCheck();
minConstant = FloatDraggable(rect, minConstant, mmCurve.m_RemapValue, 20f, "g5");
if (EditorGUI.EndChangeCheck())
{
mmCurve.minConstant = minConstant;
}
rect.x += rect4.width + 20f;
EditorGUI.BeginChangeCheck();
maxConstant = FloatDraggable(rect, maxConstant, mmCurve.m_RemapValue, 20f, "g5");
if (EditorGUI.EndChangeCheck())
{
mmCurve.maxConstant = maxConstant;
}
break;
}
default:
{
Rect ranges = !mmCurve.signedRange ? kUnsignedRange : kSignedRange;
SerializedProperty minCurve = (state != MinMaxCurveState.k_TwoCurves) ? null : mmCurve.minCurve;
GUICurveField(position, mmCurve.maxCurve, minCurve, GetColor(mmCurve), ranges, new CurveFieldMouseDownCallback(mmCurve.OnCurveAreaMouseDown));
break;
}
}
GUIMMCurveStateList(popupRect, mmCurve);
}