Пример #1
0
    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        SerializedProperty showGroup = property.FindPropertyRelative("ShowGroup");

        if (!showGroup.boolValue)
        {
            return(16);
        }

        SerializedProperty CompareMethod = property.FindPropertyRelative("CompareMethod");

        if (CompareMethod.enumValueIndex != 2)        //!= ExactAngle
        {
            MinMaxCustomSlider slider = (MinMaxCustomSlider)attribute;

            if (slider.PropertyWidth < 250)            //use minimalist method
            {
                return(128);
            }
            else
            {
                return(96);
            }
        }
        else
        {
            return(64f);
        }
    }
Пример #2
0
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        EditorGUI.BeginProperty(position, label, property);
        int indent = EditorGUI.indentLevel;

        //positions
        Rect groupPos   = new Rect(position.x, position.y, position.width, 16);
        Rect namePos    = new Rect(position.x, position.y + 16, position.width, 16);
        Rect comparePos = new Rect(position.x, position.y + 32, position.width, 16);

        //variables
        SerializedProperty PropertyName = property.FindPropertyRelative("Name");
        SerializedProperty MinValue     = property.FindPropertyRelative("MinValue");
        SerializedProperty MaxValue     = property.FindPropertyRelative("MaxValue");

        SerializedProperty MinLimit = property.FindPropertyRelative("MinLimit");
        SerializedProperty MaxLimit = property.FindPropertyRelative("MaxLimit");

        SerializedProperty ExactValue = property.FindPropertyRelative("ExactValue");

        SerializedProperty CompareMethod = property.FindPropertyRelative("CompareMethod");

        SerializedProperty showGroup = property.FindPropertyRelative("ShowGroup");

        MinMaxCustomSlider slider = (MinMaxCustomSlider)attribute;

        slider.PropertyWidth = position.width;

        //default values
        SetupDefaultValues(MinValue, MaxValue, MinLimit, MaxLimit, PropertyName, ExactValue, showGroup);

        //controls
        showGroup.boolValue = EditorGUI.Foldout(groupPos, showGroup.boolValue, PropertyName.stringValue);

        //works good
//		if(property.isExpanded)
//			showGroup.boolValue = EditorGUI.Foldout(groupPos, showGroup.boolValue, PropertyName.stringValue);
//		else
//			EditorGUI.LabelField(groupPos, PropertyName.stringValue);

        if (showGroup.boolValue)
        {
            EditorGUI.indentLevel++;

            PropertyName.stringValue = EditorGUI.TextField(namePos, "Name", PropertyName.stringValue);

//			EditorGUI.HandlePrefixLabel(new Rect(comparePos.x, comparePos.y, 92, comparePos.height),
//			                            new Rect(comparePos.x, comparePos.y, 92, comparePos.height),
//			                            new GUIContent("Custom Range:"));
//			EditorGUI.PropertyField(new Rect(comparePos.x + 95, comparePos.y, comparePos.width, comparePos.height), CompareMethod, GUIContent.none);

            EditorGUI.PropertyField(comparePos, CompareMethod);

            if (CompareMethod.enumValueIndex == 0 ||         //ValueRangeCompareMethod.ValueInsideRange)
                CompareMethod.enumValueIndex == 1)                   //ValueRangeCompareMethod.ValueOutsideRange)
            {
                if (position.width < 250)
                {
                    //positions
                    Rect slidePos = new Rect(position.x, position.y + 48, position.width, 16);

                    Rect minPos = new Rect(position.x, position.y + 64, position.width, 16);
                    Rect maxPos = new Rect(position.x, position.y + 80, position.width, 16);

                    Rect minLimitPos = new Rect(position.x, position.y + 96, position.width, 16);
                    Rect maxLimitPos = new Rect(position.x, position.y + 112, position.width, 16);

                    //controls
                    MinValue.floatValue = EditorGUI.FloatField(minPos, new GUIContent("MinValue"), MinValue.floatValue);
                    MaxValue.floatValue = EditorGUI.FloatField(maxPos, new GUIContent("MaxValue"), MaxValue.floatValue);

                    MinLimit.floatValue = EditorGUI.FloatField(minLimitPos, new GUIContent("MinLimit"), MinLimit.floatValue);
                    MaxLimit.floatValue = EditorGUI.FloatField(maxLimitPos, new GUIContent("MaxLimit"), MaxLimit.floatValue);

                    float minVal = MinValue.floatValue;
                    float maxVal = MaxValue.floatValue;

                    EditorGUI.MinMaxSlider(new GUIContent("Range"),
                                           slidePos,
                                           ref minVal, ref maxVal,
                                           MinLimit.floatValue, MaxLimit.floatValue);

                    MinValue.floatValue = minVal;
                    MaxValue.floatValue = maxVal;
                }
                else
                {
                    Rect slidePos = new Rect(position.x + 48, position.y + 48, position.width - 96, 16);

                    //positions
                    Rect minLimitPos = new Rect(position.x, position.y + 48, 72, 16);
                    Rect maxLimitPos = new Rect(position.x + position.width - 72, position.y + 48, 72, 16);

                    Rect minPos = new Rect(position.x, position.y + 64, position.width, 16);
                    Rect maxPos = new Rect(position.x, position.y + 80, position.width, 16);

                    if (EditorGUI.indentLevel < 2)
                    {
                        minLimitPos = new Rect(position.x, position.y + 48, 57, 16);
                        maxLimitPos = new Rect(position.x + position.width - 57, position.y + 48, 57, 16);
                    }

                    //controls
                    MinValue.floatValue = EditorGUI.FloatField(minPos, new GUIContent("MinValue"), MinValue.floatValue);
                    MaxValue.floatValue = EditorGUI.FloatField(maxPos, new GUIContent("MaxValue"), MaxValue.floatValue);

                    MinLimit.floatValue = EditorGUI.FloatField(minLimitPos, GUIContent.none, MinLimit.floatValue);
                    MaxLimit.floatValue = EditorGUI.FloatField(maxLimitPos, GUIContent.none, MaxLimit.floatValue);

                    float minVal = MinValue.floatValue;
                    float maxVal = MaxValue.floatValue;

                    EditorGUI.MinMaxSlider(GUIContent.none,
                                           slidePos,
                                           ref minVal, ref maxVal,
                                           MinLimit.floatValue, MaxLimit.floatValue);

                    MinValue.floatValue = minVal;
                    MaxValue.floatValue = maxVal;
                }
            }
            else             //ExactAngle
            {
                Rect exactValPos = new Rect(position.x, position.y + 48, position.width, 16);
                EditorGUI.PropertyField(exactValPos, ExactValue);
            }
        }

        EditorGUI.indentLevel = indent;
        EditorGUI.EndProperty();
    }