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