56 lines
2.2 KiB
C#
56 lines
2.2 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEditor;
|
||
|
|
||
|
namespace Cinemachine.Editor
|
||
|
{
|
||
|
[CustomPropertyDrawer(typeof(OrbitalTransposerHeadingPropertyAttribute))]
|
||
|
internal sealed class OrbitalTransposerHeadingPropertyDrawer : PropertyDrawer
|
||
|
{
|
||
|
const int vSpace = 2;
|
||
|
bool mExpanded = true;
|
||
|
CinemachineOrbitalTransposer.Heading def = new CinemachineOrbitalTransposer.Heading(); // to access name strings
|
||
|
|
||
|
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
float height = EditorGUIUtility.singleLineHeight;
|
||
|
rect.height = height;
|
||
|
mExpanded = EditorGUI.Foldout(rect, mExpanded, EditorGUI.BeginProperty(rect, label, property), true);
|
||
|
if (mExpanded)
|
||
|
{
|
||
|
++EditorGUI.indentLevel;
|
||
|
|
||
|
rect.y += height + vSpace;
|
||
|
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_Definition));
|
||
|
|
||
|
if (IsVelocityMode(property))
|
||
|
{
|
||
|
rect.y += height + vSpace;
|
||
|
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_VelocityFilterStrength));
|
||
|
}
|
||
|
|
||
|
rect.y += height + vSpace;
|
||
|
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_Bias));
|
||
|
|
||
|
--EditorGUI.indentLevel;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
float height = EditorGUIUtility.singleLineHeight + vSpace;
|
||
|
if (mExpanded)
|
||
|
height *= IsVelocityMode(property) ? 4 : 3;
|
||
|
return height;
|
||
|
}
|
||
|
|
||
|
bool IsVelocityMode(SerializedProperty property)
|
||
|
{
|
||
|
var mode = property.FindPropertyRelative(() => def.m_Definition);
|
||
|
var value = (CinemachineOrbitalTransposer.Heading.HeadingDefinition)
|
||
|
(System.Enum.GetValues(typeof(CinemachineOrbitalTransposer.Heading.HeadingDefinition))).GetValue(mode.enumValueIndex);
|
||
|
return value == CinemachineOrbitalTransposer.Heading.HeadingDefinition.Velocity
|
||
|
|| value == CinemachineOrbitalTransposer.Heading.HeadingDefinition.PositionDelta;
|
||
|
}
|
||
|
}
|
||
|
}
|