Firstborn/Library/PackageCache/com.unity.cinemachine@2.8.9/Editor/PropertyDrawers/OrbitalTransposerHeadingPro...
Schaken-Mods b486678290 Library -Artifacts
Library -Artifacts
2023-03-28 12:24:16 -05:00

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;
}
}
}