123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using UnityEditor;
- using UnityEngine;
- namespace MPUIKIT.Editor {
- [CustomPropertyDrawer(typeof(Hexagon))]
- public class HexagonPropertyDrawer : PropertyDrawer {
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
- EditorGUI.BeginProperty(position, label, property);
- {
- SerializedProperty rectRadius = property.FindPropertyRelative("m_CornerRadius");
- SerializedProperty uniformRect = property.FindPropertyRelative("m_UniformCornerRadius");
- SerializedProperty triSizes = property.FindPropertyRelative("m_TipSize");
- SerializedProperty uniformTriS = property.FindPropertyRelative("m_UniformTipSize");
- SerializedProperty triRadius = property.FindPropertyRelative("m_TipRadius");
- SerializedProperty uniformTriR = property.FindPropertyRelative("m_UniformTipRadius");
-
- Vector4 radiusVectorValue = rectRadius.vector4Value;
- float radiusFloatValue = radiusVectorValue.x;
- bool rectBoolVal = uniformRect.boolValue;
- float[] zw = new[] {radiusVectorValue.w, radiusVectorValue.z};
- float[] xy = new[] {radiusVectorValue.x, radiusVectorValue.y};
- Vector2 triSizesVectorValue = triSizes.vector2Value;
- float triSizesFloatValue = triSizesVectorValue.x;
- Vector2 triRadiusVectorValue = triRadius.vector2Value;
- float triRadiusFloatValue = triRadiusVectorValue.x;
- Rect line = position;
- line.height = EditorGUIUtility.singleLineHeight;
- string[] toolbarLabel = new[] {"Free", "Uniform"};
- MPEditorUtility.CornerRadiusModeGUI(line, ref uniformRect, toolbarLabel);
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.BeginChangeCheck();
- {
- EditorGUI.showMixedValue = rectRadius.hasMultipleDifferentValues;
- if (rectBoolVal) {
- radiusFloatValue = EditorGUI.FloatField(line, "Uniform Radius", radiusFloatValue);
- }
- else {
- EditorGUI.MultiFloatField(line, new []{new GUIContent("W"), new GUIContent("Z")}, zw);
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.MultiFloatField(line, new []{new GUIContent("X"), new GUIContent("Y")}, xy);
- }
- EditorGUI.showMixedValue = false;
- }
- if (EditorGUI.EndChangeCheck()) {
- rectRadius.vector4Value = rectBoolVal
- ? new Vector4(radiusFloatValue, radiusFloatValue, radiusFloatValue, radiusFloatValue)
- : new Vector4(xy[0], xy[1], zw[1], zw[0]);
- }
-
-
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- MPEditorUtility.CornerRadiusModeGUI(line, ref uniformTriS, toolbarLabel, "Tip Size");
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.BeginChangeCheck();
- {
- EditorGUI.showMixedValue = triSizes.hasMultipleDifferentValues;
- if (uniformTriS.boolValue) {
- triSizesFloatValue = EditorGUI.FloatField(line, "Uniform Size", triSizesFloatValue);
- }
- else {
- triSizesVectorValue = EditorGUI.Vector2Field(line, string.Empty, triSizesVectorValue);
- }
- EditorGUI.showMixedValue = false;
- }
- if (EditorGUI.EndChangeCheck()) {
- triSizes.vector2Value = uniformTriS.boolValue
- ? new Vector2(triSizesFloatValue, triSizesFloatValue)
- : triSizesVectorValue;
- }
-
-
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- MPEditorUtility.CornerRadiusModeGUI(line, ref uniformTriR, toolbarLabel, "Tip Radius");
- line.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- EditorGUI.BeginChangeCheck();
- {
- EditorGUI.showMixedValue = triRadius.hasMultipleDifferentValues;
- if (uniformTriR.boolValue) {
- triRadiusFloatValue = EditorGUI.FloatField(line, "Uniform Radius", triRadiusFloatValue);
- }
- else {
- triRadiusVectorValue = EditorGUI.Vector2Field(line, string.Empty, triRadiusVectorValue);
- }
- EditorGUI.showMixedValue = false;
- }
- if (EditorGUI.EndChangeCheck()) {
- triRadius.vector2Value = uniformTriR.boolValue
- ? new Vector2(triRadiusFloatValue, triRadiusFloatValue)
- : triRadiusVectorValue;
- }
- }
- EditorGUI.EndProperty();
- }
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
- if (property.FindPropertyRelative("m_UniformCornerRadius").boolValue) {
- return EditorGUIUtility.singleLineHeight * 6 + EditorGUIUtility.standardVerticalSpacing * 5;
- }
- return EditorGUIUtility.singleLineHeight * 7 + EditorGUIUtility.standardVerticalSpacing * 6;
- }
- }
- }
|