com.alicizax.kyrylokuzyk.pr.../Editor/TweenSettingsTypesPropDrawer.cs
陈思海 de686b7cf8 init
2025-01-23 10:16:47 +08:00

86 lines
2.9 KiB
C#

#pragma warning disable CS0162
using JetBrains.Annotations;
using PrimeTween;
using UnityEditor;
using UnityEngine;
using static UnityEditor.EditorGUI;
using static UnityEditor.EditorGUIUtility;
[CustomPropertyDrawer(typeof(TweenSettings<float>)),
CustomPropertyDrawer(typeof(TweenSettings<Color>)),
CustomPropertyDrawer(typeof(TweenSettings<Vector2>)),
CustomPropertyDrawer(typeof(TweenSettings<Vector3>)),
CustomPropertyDrawer(typeof(TweenSettings<Vector4>)),
CustomPropertyDrawer(typeof(TweenSettings<Rect>)),
CustomPropertyDrawer(typeof(TweenSettings<Quaternion>)),
CustomPropertyDrawer(typeof(TweenSettings<int>))
]
internal class TweenSettingsTypesPropDrawer : PropertyDrawer {
const bool drawStartFromCurrent = false;
public override float GetPropertyHeight([NotNull] SerializedProperty property, GUIContent label) {
if (!property.isExpanded) {
return singleLineHeight;
}
var count = 0;
float height = 0f;
property.NextVisible(true); // startFromCurrent
incrementHeight(); // startValue
incrementHeight(); // endValue
property.NextVisible(false);
var result = height + 0 * (count - 1) + TweenSettingsPropDrawer.getPropHeight(property);
result += standardVerticalSpacing * 2; // extra space
return result;
void incrementHeight() {
property.NextVisible(false);
count++; // startFromCurrent
height += EditorGUI.GetPropertyHeight(property, true);
}
}
public override void OnGUI(Rect position, [NotNull] SerializedProperty property, GUIContent label) {
var rect = new Rect(position) { height = singleLineHeight };
PropertyField(rect, property, label);
if (!property.isExpanded) {
return;
}
rect.y += singleLineHeight + standardVerticalSpacing;
indentLevel++;
// startFromCurrent
property.NextVisible(true);
// startValue
{
var startFromCurrent = property.boolValue;
property.NextVisible(false);
if (!startFromCurrent || !drawStartFromCurrent) {
PropertyField(rect, property, true);
moveToNextLine(true);
}
}
// endValue
property.NextVisible(false);
PropertyField(rect, property, true);
moveToNextLine(true);
// duration
{
property.NextVisible(false); // settings
property.NextVisible(true); // duration
TweenSettingsPropDrawer.DrawDuration(rect, property);
moveToNextLine(false);
}
TweenSettingsPropDrawer.drawEaseTillEnd(property, ref rect);
indentLevel--;
void moveToNextLine(bool includeChildren) {
rect.y += EditorGUI.GetPropertyHeight(property, includeChildren) + standardVerticalSpacing;
}
}
}