Snaparazzi/Assets/MPUIKit/Editor/Scripts/EffectDrawers/GradeintEffectPropertyDrawer.cs
2024-02-29 21:33:27 +01:00

89 lines
4.8 KiB
C#

using UnityEditor;
using UnityEngine;
namespace MPUIKIT.Editor {
[CustomPropertyDrawer(typeof(GradientEffect))]
public class GradeintEffectPropertyDrawer : PropertyDrawer {
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
EditorGUI.BeginProperty(position, label, property);
{
SerializedProperty Enabled = property.FindPropertyRelative("m_Enabled");
bool enabled = Enabled.boolValue;
SerializedProperty gradientType = property.FindPropertyRelative("m_GradientType");
GradientType gradType = (GradientType) gradientType.enumValueIndex;
SerializedProperty gradient = property.FindPropertyRelative("m_Gradient");
SerializedProperty rotation = property.FindPropertyRelative("m_Rotation");
SerializedProperty cornerColors = property.FindPropertyRelative("m_CornerGradientColors");
Rect line = position;
line.height = EditorGUIUtility.singleLineHeight;
EditorGUI.BeginChangeCheck();
{
EditorGUI.showMixedValue = Enabled.hasMultipleDifferentValues;
enabled = EditorGUI.Toggle(line, "Gradient", enabled);
EditorGUI.showMixedValue = false;
if (enabled) {
line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.showMixedValue = gradientType.hasMultipleDifferentValues;
gradType = (GradientType) EditorGUI.EnumPopup(line, "Type", gradType);
EditorGUI.showMixedValue = false;
}
}
if (EditorGUI.EndChangeCheck()) {
Enabled.boolValue = enabled;
gradientType.enumValueIndex = (int) gradType;
}
if (enabled) {
if (gradType == GradientType.Corner) {
if (cornerColors.arraySize != 4)
cornerColors.arraySize = 4;
line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
float colFieldWidth = line.width / 2f - 5f;
line.width = colFieldWidth;
EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(0), GUIContent.none);
line.x += colFieldWidth + 10;
EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(1), GUIContent.none);
line.x -= colFieldWidth + 10;
line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(2), GUIContent.none);
line.x += colFieldWidth + 10;
EditorGUI.PropertyField(line, cornerColors.GetArrayElementAtIndex(3), GUIContent.none);
line.x -= colFieldWidth + 10;
line.width = colFieldWidth * 2 + 10;
}
else {
line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.showMixedValue = gradient.hasMultipleDifferentValues;
EditorGUI.PropertyField(line, gradient, false);
if (gradType == GradientType.Linear) {
line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.showMixedValue = rotation.hasMultipleDifferentValues;
EditorGUI.PropertyField(line, rotation, new GUIContent("Rotation"));
}
EditorGUI.showMixedValue = false;
}
}
}
EditorGUI.EndProperty();
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
SerializedProperty enabled = property.FindPropertyRelative("m_Enabled");
if (enabled.boolValue) {
SerializedProperty gradientMode = property.FindPropertyRelative("m_GradientType");
if (gradientMode.enumValueIndex == (int) GradientType.Radial) {
return EditorGUIUtility.singleLineHeight * 3 + EditorGUIUtility.standardVerticalSpacing * 2;
}
return EditorGUIUtility.singleLineHeight * 4 + EditorGUIUtility.standardVerticalSpacing * 3;
}
return EditorGUIUtility.singleLineHeight;
}
}
}