Ejemplo n.º 1
0
 public override void SetProperties(ModifierProperties properties)
 {
     _options = (GeometryExtrusionOptions)properties;
     _options.PropertyHasChanged += UpdateModifier;
 }
Ejemplo n.º 2
0
 public override void SetProperties(ModifierProperties properties)
 {
     _options = (GeometryExtrusionOptions)properties;
 }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            GeometryExtrusionOptions extrusionOptions = (GeometryExtrusionOptions)EditorHelper.GetTargetObjectOfProperty(property);

            var extrusionTypeProperty = property.FindPropertyRelative("extrusionType");
            var displayNames          = extrusionTypeProperty.enumDisplayNames;
            int count = extrusionTypeProperty.enumDisplayNames.Length;

            if (!isGUIContentSet)
            {
                extrusionTypeContent = new GUIContent[count];
                for (int extIdx = 0; extIdx < count; extIdx++)
                {
                    extrusionTypeContent[extIdx] = new GUIContent
                    {
                        text    = displayNames[extIdx],
                        tooltip = EnumExtensions.Description((ExtrusionType)extIdx),
                    };
                }
                isGUIContentSet = true;
            }

            var extrusionTypeLabel = new GUIContent
            {
                text    = "Extrusion Type",
                tooltip = "Type of geometry extrusion"
            };

            extrusionTypeProperty.enumValueIndex = EditorGUILayout.Popup(extrusionTypeLabel, extrusionTypeProperty.enumValueIndex, extrusionTypeContent);
            EditorHelper.CheckForModifiedProperty(extrusionTypeProperty, extrusionOptions);

            var sourceTypeValue = (Unity.Map.ExtrusionType)extrusionTypeProperty.enumValueIndex;

            var minHeightProperty = property.FindPropertyRelative("minimumHeight");
            var maxHeightProperty = property.FindPropertyRelative("maximumHeight");

            var extrusionGeometryType = property.FindPropertyRelative("extrusionGeometryType");
            var extrusionGeometryGUI  = new GUIContent {
                text = "Geometry Type", tooltip = EnumExtensions.Description((Unity.Map.ExtrusionGeometryType)extrusionGeometryType.enumValueIndex)
            };

            EditorGUI.indentLevel++;
            switch (sourceTypeValue)
            {
            case Unity.Map.ExtrusionType.None:
                break;

            case Unity.Map.ExtrusionType.PropertyHeight:
                EditorGUILayout.PropertyField(extrusionGeometryType, extrusionGeometryGUI);
                DrawPropertyDropDown(property, position);
                break;

            case Unity.Map.ExtrusionType.MinHeight:
                EditorGUILayout.PropertyField(extrusionGeometryType, extrusionGeometryGUI);
                DrawPropertyDropDown(property, position);
                break;

            case Unity.Map.ExtrusionType.MaxHeight:
                EditorGUILayout.PropertyField(extrusionGeometryType, extrusionGeometryGUI);
                DrawPropertyDropDown(property, position);
                break;

            case Unity.Map.ExtrusionType.RangeHeight:
                EditorGUILayout.PropertyField(extrusionGeometryType, extrusionGeometryGUI);
                DrawPropertyDropDown(property, position);
                EditorGUILayout.PropertyField(minHeightProperty);
                EditorGUILayout.PropertyField(maxHeightProperty);
                if (minHeightProperty.floatValue > maxHeightProperty.floatValue)
                {
                    EditorGUILayout.HelpBox("Maximum Height less than Minimum Height!", MessageType.Error);
                }
                break;

            case Unity.Map.ExtrusionType.AbsoluteHeight:
                EditorGUILayout.PropertyField(extrusionGeometryType, extrusionGeometryGUI);
                EditorGUILayout.PropertyField(maxHeightProperty, new GUIContent {
                    text = "Height"
                });
                break;

            default:
                break;
            }

            EditorHelper.CheckForModifiedProperty(extrusionGeometryType, extrusionOptions);

            EditorGUILayout.PropertyField(property.FindPropertyRelative("extrusionScaleFactor"), new GUIContent {
                text = "Scale Factor"
            });
            EditorHelper.CheckForModifiedProperty(property.FindPropertyRelative("extrusionScaleFactor"), extrusionOptions);

            EditorGUI.indentLevel--;
        }