|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
|
|
|
|
|
|
|
namespace RootMotion.Dynamics {
|
|
|
|
|
|
|
|
|
|
|
|
[CustomPropertyDrawer (typeof (Weight))]
|
|
|
|
|
|
public class WeightDrawer : PropertyDrawer {
|
|
|
|
|
|
|
|
|
|
|
|
const int valueWidth = 30;
|
|
|
|
|
|
const int gap = 20;
|
|
|
|
|
|
const float min = 0;
|
|
|
|
|
|
const float max = 1;
|
|
|
|
|
|
|
|
|
|
|
|
public override void OnGUI (Rect pos, SerializedProperty prop, GUIContent label) {
|
|
|
|
|
|
|
|
|
|
|
|
SerializedProperty mode = prop.FindPropertyRelative("mode");
|
|
|
|
|
|
SerializedProperty floatValue = prop.FindPropertyRelative ("floatValue");
|
|
|
|
|
|
SerializedProperty curve = prop.FindPropertyRelative ("curve");
|
|
|
|
|
|
SerializedProperty tooltip = prop.FindPropertyRelative("tooltip");
|
|
|
|
|
|
label.tooltip = tooltip.stringValue;
|
|
|
|
|
|
|
|
|
|
|
|
Rect left = new Rect(pos.x, pos.y, pos.width - valueWidth - gap, pos.height);
|
|
|
|
|
|
Rect right = new Rect (pos.width - valueWidth, pos.y, valueWidth, pos.height);
|
|
|
|
|
|
|
|
|
|
|
|
Weight.Mode m = (Weight.Mode)mode.enumValueIndex;
|
|
|
|
|
|
|
|
|
|
|
|
if (m == Weight.Mode.Float) {
|
|
|
|
|
|
floatValue.floatValue = EditorGUI.FloatField(left, label, floatValue.floatValue);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// Draw curve
|
|
|
|
|
|
int indent = EditorGUI.indentLevel;
|
|
|
|
|
|
|
|
|
|
|
|
EditorGUI.PropertyField (left, curve, label);
|
|
|
|
|
|
EditorGUI.indentLevel = indent;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int i = EditorGUI.indentLevel;
|
|
|
|
|
|
EditorGUI.indentLevel = 0;
|
|
|
|
|
|
|
|
|
|
|
|
m = (Weight.Mode)EditorGUI.EnumPopup(right, GUIContent.none, ( Weight.Mode)mode.enumValueIndex, EditorStyles.miniBoldLabel);
|
|
|
|
|
|
mode.enumValueIndex = (int)m;
|
|
|
|
|
|
|
|
|
|
|
|
EditorGUI.indentLevel = i;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|