protected override void RenderContent(UnityEngine.Object undoRecordObject)
        {
            int newInt; bool newBool;

            var content = new GUIContent();

            content.text    = "Can snap to grid";
            content.tooltip = "When turned on, vertices can be snapped to grid cells.";
            newBool         = EditorGUILayout.ToggleLeft(content, CanSnapToGrid);
            if (newBool != CanSnapToGrid)
            {
                EditorUndoEx.Record(undoRecordObject);
                CanSnapToGrid = newBool;
            }

            content.text    = "Can snap to object verts";
            content.tooltip = "When turned on, vertices can be snapped to other object vertices.";
            newBool         = EditorGUILayout.ToggleLeft(content, CanSnapToObjectVerts);
            if (newBool != CanSnapToObjectVerts)
            {
                EditorUndoEx.Record(undoRecordObject);
                CanSnapToObjectVerts = newBool;
            }

            content.text    = "Snap destination layers";
            content.tooltip = "Allows you to specify which layers can be used as snap destinations when doing vertex snapping.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, SnapDestinationLayers);
            if (newInt != SnapDestinationLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                SnapDestinationLayers = newInt;
            }
        }
        protected override void RenderContent(UnityEngine.Object undoRecordObject)
        {
            int newInt; bool newBool; float newFloat;

            GUIContent content = new GUIContent();

            content.text    = "Snap destination layers";
            content.tooltip = "When snapping to nearby obejcts, only the objects which belong to one of these layers will be taken into account.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, SnapDestinationLayers);
            if (newInt != SnapDestinationLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                SnapDestinationLayers = newInt;
            }

            content.text    = "Can climb objects";
            content.tooltip = "This toggle controls what happens when the mouse cursor hovers other objects. If checked, the target obejcts " +
                              "will climb the hovered objects. Otherwise, they will sit on the scene grid.";
            newBool = EditorGUILayout.ToggleLeft(content, CanClimbObjects);
            if (newBool != CanClimbObjects)
            {
                EditorUndoEx.Record(undoRecordObject);
                CanClimbObjects = newBool;
            }

            content.text    = "Snap radius";
            content.tooltip = "This is a distance value that is used to gather nearby destination objects.";
            newFloat        = EditorGUILayout.FloatField(content, SnapRadius);
            if (newFloat != SnapRadius)
            {
                EditorUndoEx.Record(undoRecordObject);
                SnapRadius = newFloat;
            }
        }
        protected override void RenderContent(UnityEngine.Object undoRecordObject)
        {
            int newInt;

            var content = new GUIContent();

            content.text    = "Transformable layers";
            content.tooltip = "Allows you to specify which layers can be transformed by the gizmo. Objects which do not belong to a transformable layer will not be transformed by the gizmo.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, TransformableLayers);
            if (newInt != TransformableLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                TransformableLayers = newInt;
            }
        }
        protected override void RenderContent(UnityEngine.Object undoRecordObject)
        {
            bool newBool; int newInt;
            MultiSelectOverlapMode newMultiSelectOverlapMode;

            // Can click select
            var content = new GUIContent();

            content.text    = "Can click select";
            content.tooltip = "Allows you to specify if objects can be selected via mouse clicks.";
            newBool         = EditorGUILayout.ToggleLeft(content, CanClickSelect);
            if (newBool != CanClickSelect)
            {
                EditorUndoEx.Record(undoRecordObject);
                CanClickSelect = newBool;
            }

            // Can cyclical click select
            content.text    = "Enable cyclical click select";
            content.tooltip = "If this is checked, each successive click will select an object which lies behind the previously selected one. Useful especially when dealing with overlapping sprites.";
            newBool         = EditorGUILayout.ToggleLeft(content, EnableCyclicalClickSelect);
            if (newBool != EnableCyclicalClickSelect)
            {
                EditorUndoEx.Record(undoRecordObject);
                EnableCyclicalClickSelect = newBool;
            }

            // Can multi select
            content.text    = "Can multi-select";
            content.tooltip = "Allows you to specify if objects can be selected using the multi-select shape.";
            newBool         = EditorGUILayout.ToggleLeft(content, CanMultiSelect);
            if (newBool != CanMultiSelect)
            {
                EditorUndoEx.Record(undoRecordObject);
                CanMultiSelect = newBool;
            }

            content.text              = "Multi-select overlap mode";
            content.tooltip           = "Allows you to specify the way in which objects are selected via the multi-select shape.";
            newMultiSelectOverlapMode = (MultiSelectOverlapMode)EditorGUILayout.EnumPopup(content, MultiSelectOverlapMode);
            if (newMultiSelectOverlapMode != MultiSelectOverlapMode)
            {
                EditorUndoEx.Record(undoRecordObject);
                MultiSelectOverlapMode = newMultiSelectOverlapMode;
            }

            // Selectable object types
            content.text    = "Selectable object types";
            content.tooltip = "Allows you to specify which object types can be selected.";
            newInt          = (int)((GameObjectType)EditorGUILayout.EnumMaskPopup(content, (GameObjectType)_selectableObjectTypes));
            if (newInt != (int)_selectableObjectTypes)
            {
                EditorUndoEx.Record(undoRecordObject);
                _selectableObjectTypes = (GameObjectType)newInt;
            }

            // Selectable layers
            content.text    = "Selectable layers";
            content.tooltip = "Allows you to specify which layers can be selected.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, _selectableLayers);
            if (newInt != _selectableLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                _selectableLayers = newInt;
            }

            // Duplicatable layers
            content.text    = "Duplicatable layers";
            content.tooltip = "Allows you to specify which layers can be duplicated.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, _duplicatableLayers);
            if (newInt != _duplicatableLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                _duplicatableLayers = newInt;
            }

            // Deletable layers
            content.text    = "Deletable layers";
            content.tooltip = "Allows you to specify which layers can be deleted.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, _deletableLayers);
            if (newInt != _deletableLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                _deletableLayers = newInt;
            }

            // Multi-select shape
            content.text    = "Min multi-select size";
            content.tooltip = "The minimum size (width and height) the multi-select shape must have to be able to overlap objects. The value is expressed in pixels.";
            newInt          = EditorGUILayout.IntField(content, MinMultiSelectSize);
            if (newInt != MinMultiSelectSize)
            {
                EditorUndoEx.Record(undoRecordObject);
                MinMultiSelectSize = newInt;
            }
        }
Ejemplo n.º 5
0
        protected override void RenderContent(UnityEngine.Object undoRecordObject)
        {
            bool          newBool; float newFloat; int newInt;
            TransformAxis newTransformAxis;

            EditorGUILayoutEx.SectionHeader("Alignment");
            var content = new GUIContent();

            content.text    = "Align axis";
            content.tooltip = "If this is checked, the grabbed objects will have their local axes aligned with the grab surface normal.";
            newBool         = EditorGUILayout.ToggleLeft(content, AlignAxis);
            if (newBool != AlignAxis)
            {
                EditorUndoEx.Record(undoRecordObject);
                AlignAxis = newBool;
            }

            content.text     = "Alignment axis";
            content.tooltip  = "When axis alignment is turned on, this is the axis that will be aligned to the surface normal.";
            newTransformAxis = (TransformAxis)EditorGUILayout.EnumPopup(content, AlignmentAxis);
            if (newTransformAxis != AlignmentAxis)
            {
                EditorUndoEx.Record(undoRecordObject);
                AlignmentAxis = newTransformAxis;
            }

            EditorGUILayout.Separator();
            EditorGUILayoutEx.SectionHeader("Sensitivity");
            content.text    = "Rotation";
            content.tooltip = "Allows you to control how sensitive object rotation is to the input device.";
            newFloat        = EditorGUILayout.FloatField(content, RotationSensitivity);
            if (newFloat != RotationSensitivity)
            {
                EditorUndoEx.Record(undoRecordObject);
                RotationSensitivity = newFloat;
            }

            content.text    = "Scale";
            content.tooltip = "Allows you to control how sensitive object scaling is to the input device.";
            newFloat        = EditorGUILayout.FloatField(content, ScaleSensitivity);
            if (newFloat != ScaleSensitivity)
            {
                EditorUndoEx.Record(undoRecordObject);
                ScaleSensitivity = newFloat;
            }

            content.text    = "Offset from surface";
            content.tooltip = "Sensitivity value used when offseting objects from the surface on which they are sitting.";
            newFloat        = EditorGUILayout.FloatField(content, OffsetFromSurfaceSensitivity);
            if (newFloat != OffsetFromSurfaceSensitivity)
            {
                EditorUndoEx.Record(undoRecordObject);
                OffsetFromSurfaceSensitivity = newFloat;
            }

            content.text    = "Offset from anchor";
            content.tooltip = "Sensitivity value used when offseting objects from the anchor point.";
            newFloat        = EditorGUILayout.FloatField(content, OffsetFromAnchorSensitivity);
            if (newFloat != OffsetFromAnchorSensitivity)
            {
                EditorUndoEx.Record(undoRecordObject);
                OffsetFromAnchorSensitivity = newFloat;
            }

            EditorGUILayout.Separator();
            EditorGUILayoutEx.SectionHeader("Surface");
            content.text    = "Default offset";
            content.tooltip = "A default offset value which controls the distance between the objects and the surface they are sitting on. Negative values can be used to embed objects in the surface.";
            newFloat        = EditorGUILayout.FloatField(content, DefaultOffsetFromSurface);
            if (newFloat != DefaultOffsetFromSurface)
            {
                EditorUndoEx.Record(undoRecordObject);
                DefaultOffsetFromSurface = newFloat;
            }

            content.text    = "Surface flags";
            content.tooltip = "Allows you to specify the types of surfaces that can be used during a grab session.";
            newInt          = (int)((ObjectGrabSurfaceFlags)EditorGUILayout.EnumMaskPopup(content, (ObjectGrabSurfaceFlags)SurfaceFlags));
            if (newInt != (int)SurfaceFlags)
            {
                EditorUndoEx.Record(undoRecordObject);
                SurfaceFlags = (ObjectGrabSurfaceFlags)newInt;
            }

            content.text    = "Surface layers";
            content.tooltip = "Allows you to specify which layers can be used as snap surface during a grab session.";
            newInt          = EditorGUILayoutEx.LayerMaskField(content, SurfaceLayers);
            if (newInt != SurfaceLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                SurfaceLayers = newInt;
            }

            content.text    = "Spherical mesh layers";
            content.tooltip = "Objects that belong to these layers will be treated as spherical meshes (spheres). This allows the system to make " +
                              "certain assumptions about the surface geometry in order to produce the correct results.";
            newInt = EditorGUILayoutEx.LayerMaskField(content, SphericalMeshLayers);
            if (newInt != SphericalMeshLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                SphericalMeshLayers = newInt;
            }

            content.text    = "Terrain mesh layers";
            content.tooltip = "Objects that belong to these layers will be treated as terrain meshes (meshes that resemble a terrain but are NOT Unity Terrains). This allows the system to make " +
                              "certain assumptions about the surface geometry in order to produce the correct results.";
            newInt = EditorGUILayoutEx.LayerMaskField(content, TerrainMeshLayers);
            if (newInt != TerrainMeshLayers)
            {
                EditorUndoEx.Record(undoRecordObject);
                TerrainMeshLayers = newInt;
            }

            EditorGUILayout.Separator();
            EditorGUILayoutEx.SectionHeader("Per layer settings");
            EditorGUILayout.BeginHorizontal();
            content.text    = "Add";
            content.tooltip = "Adds grab settings which apply only to the chosen layer. Objects which belong to that layer will use these settings during a grab session.";
            if (GUILayout.Button(content, GUILayout.Width(70.0f)))
            {
                EditorUndoEx.Record(undoRecordObject);
                GetLayerGrabSettings(_newLayer).IsActive = true;
            }

            newInt = EditorGUILayout.LayerField(_newLayer);
            if (newInt != _newLayer)
            {
                EditorUndoEx.Record(undoRecordObject);
                _newLayer = newInt;
            }
            EditorGUILayout.EndHorizontal();

            foreach (var layerGrabSettings in _layerGrabSettings)
            {
                if (layerGrabSettings.IsActive)
                {
                    EditorGUILayout.BeginVertical("Box");
                    EditorGUILayout.HelpBox(LayerMask.LayerToName(layerGrabSettings.Layer), MessageType.None);

                    content.text    = "Align axis";
                    content.tooltip = "If this is checked, the grabbed objects that belong to this layer will have their local axes aligned with the grab surface normal.";
                    newBool         = EditorGUILayout.ToggleLeft(content, layerGrabSettings.AlignAxis);
                    if (newBool != layerGrabSettings.AlignAxis)
                    {
                        EditorUndoEx.Record(undoRecordObject);
                        layerGrabSettings.AlignAxis = newBool;
                    }

                    content.text     = "Alignment axis";
                    content.tooltip  = "When axis alignment is turned on, this is the axis that will be aligned to the surface normal.";
                    newTransformAxis = (TransformAxis)EditorGUILayout.EnumPopup(content, layerGrabSettings.AlignmentAxis);
                    if (newTransformAxis != layerGrabSettings.AlignmentAxis)
                    {
                        EditorUndoEx.Record(undoRecordObject);
                        layerGrabSettings.AlignmentAxis = newTransformAxis;
                    }

                    content.text    = "Default offset from surface";
                    content.tooltip = "A default offset value which controls the distance between the objects and the surface they are sitting on. Negative values can be used to embed objects in the surface.";
                    newFloat        = EditorGUILayout.FloatField(content, layerGrabSettings.DefaultOffsetFromSurface);
                    if (newFloat != layerGrabSettings.DefaultOffsetFromSurface)
                    {
                        EditorUndoEx.Record(undoRecordObject);
                        layerGrabSettings.DefaultOffsetFromSurface = newFloat;
                    }

                    content.text    = "Remove";
                    content.tooltip = "Removes the settings for this layer.";
                    if (GUILayout.Button(content, GUILayout.Width(70.0f)))
                    {
                        EditorUndoEx.Record(undoRecordObject);
                        layerGrabSettings.IsActive = false;
                    }
                    EditorGUILayout.EndVertical();
                }
            }
        }