示例#1
0
        static void UndoRedoPerformed()
        {
            if (instance.activeTool != null)
            {
                instance.activeTool.UndoRedoPerformed();
            }

            InternalCSGModelManager.UpdateMaterialRegistration();

            CSGBrushEditorManager.UpdateSelection(forceUpdate: true);
        }
        static void UndoRedoPerformed()
        {
            if (EditorApplication.isPlayingOrWillChangePlaymode)
            {
                return;
            }

            if (instance.activeTool != null)
            {
                instance.activeTool.UndoRedoPerformed();
            }

            CSGBrushEditorManager.UpdateSelection(forceUpdate: true);
        }
示例#3
0
 static void OnSelectionChanged()
 {
     CSGBrushEditorManager.UpdateSelection();
 }
        static void InitTools()
        {
            if (instance)
            {
                return;
            }


            var values = Enum.GetValues(typeof(ToolEditMode)).Cast <ToolEditMode>().ToList();

            values.Sort();
            firstEditMode = values[0];
            lastEditModes = values[values.Count - 1];

            Undo.undoRedoPerformed -= UndoRedoPerformed;
            Undo.undoRedoPerformed += UndoRedoPerformed;

            EditorApplication.modifierKeysChanged -= OnModifierKeysChanged;
            EditorApplication.modifierKeysChanged += OnModifierKeysChanged;


            var managers = FindObjectsOfType <CSGBrushEditorManager>().ToArray();

            for (int i = 0; i < managers.Length; i++)
            {
                DestroyImmediate(managers[i]);
            }
            instance           = ScriptableObject.CreateInstance <CSGBrushEditorManager>();
            instance.hideFlags = scriptableObjectHideflags;

            var types = new Type[]
            {
                typeof(ObjectEditBrushTool),
                typeof(GenerateBrushTool),
                typeof(MeshEditBrushTool),
                typeof(ClipBrushTool),
                typeof(SurfaceEditBrushTool)
            };

            if (types.Length != values.Count)
            {
                Debug.LogWarning("types.Length != values.Count");
            }

            brushTools = new IBrushTool[values.Count];
            for (int j = 0; j < types.Length; j++)
            {
                var objects = FindObjectsOfType(types[j]).ToArray();
                for (int i = 0; i < objects.Length; i++)
                {
                    DestroyImmediate(objects[i]);
                }

                var obj = ScriptableObject.CreateInstance(types[j]);
                brushTools[j] = obj as IBrushTool;
                if (brushTools[j] == null)
                {
                    Debug.LogWarning("brushTools[j] == null");
                    continue;
                }
                if (!(brushTools[j] is ScriptableObject))
                {
                    Debug.LogWarning("!(brushTools[j] is ScriptableObject)");
                    continue;
                }
                obj.hideFlags = scriptableObjectHideflags;
            }

            GenerateBrushTool.ShapeCommitted -= OnShapeCommittedEvent;
            GenerateBrushTool.ShapeCommitted += OnShapeCommittedEvent;
            GenerateBrushTool.ShapeCancelled -= OnShapeCancelledEvent;
            GenerateBrushTool.ShapeCancelled += OnShapeCancelledEvent;

            RealtimeCSG.CSGSettings.Reload();
            instance.editMode = RealtimeCSG.CSGSettings.EditMode;

            CSGBrushEditorManager.UpdateSelection(true);
            InitTargets();
        }
示例#5
0
        static void OnScene(SceneView sceneView)
        {
            if (!RealtimeCSG.CSGSettings.EnableRealtimeCSG)
            {
                return;
            }
            UpdateOnSceneChange();
            if (Event.current.type == EventType.layout)
            {
                ColorSettings.Update();
            }

            if (!IsActive())
            {
                ResetUpdateRoutine();
            }

            if (Event.current.type == EventType.MouseDown ||
                Event.current.type == EventType.MouseDrag)
            {
                mousePressed = true;
            }
            else if (Event.current.type == EventType.MouseUp ||
                     Event.current.type == EventType.MouseMove)
            {
                mousePressed = false;
            }

            UpdateRectSelection(sceneView);
            OnHandleDragAndDrop(inSceneView: true);

            var s_RectSelectionID_instance = (int)s_RectSelectionID_field.GetValue(null);
            var eventType = Event.current.GetTypeForControl(s_RectSelectionID_instance);

            if (GUIUtility.hotControl == s_RectSelectionID_instance &&
                CSGBrushEditorManager.ActiveTool.IgnoreUnityRect)
            {
                GUIUtility.hotControl = 0;
            }
            switch (eventType)
            {
            case EventType.MouseDown:
            {
                rectClickDown      = (Event.current.button == 0 && GUIUtility.hotControl == s_RectSelectionID_instance);
                clickMousePosition = Event.current.mousePosition;
                mouseDragged       = false;
                break;
            }

            case EventType.MouseUp:
            {
                rectClickDown = false;
                break;
            }

            case EventType.MouseMove:
            {
                rectClickDown = false;
                break;
            }

            case EventType.Used:
            {
                if (clickMousePosition != Event.current.mousePosition)
                {
                    mouseDragged = true;
                }
                if (!mouseDragged && rectClickDown &&
                    Event.current.button == 0)
                {
                    // m_RectSelection field of SceneView
                    var m_RectSelection_instance = m_RectSelection_field.GetValue(sceneView);

                    var m_RectSelecting_instance = (bool)m_RectSelecting_field.GetValue(m_RectSelection_instance);
                    if (!m_RectSelecting_instance)
                    {
                        // make sure GeneratedMeshes are not part of our selection
                        if (Selection.gameObjects != null)
                        {
                            var selectedObjects = Selection.objects;
                            var foundObjects    = new List <UnityEngine.Object>();
                            foreach (var obj in selectedObjects)
                            {
                                var component  = obj as Component;
                                var gameObject = obj as GameObject;
                                var transform  = obj as Transform;
                                if (!(component && component.GetComponent <GeneratedMeshes>()) &&
                                    !(gameObject && gameObject.GetComponent <GeneratedMeshes>()) &&
                                    !(transform && transform.GetComponent <Transform>()))
                                {
                                    foundObjects.Add(obj);
                                }
                            }
                            if (foundObjects.Count != selectedObjects.Length)
                            {
                                Selection.objects = foundObjects.ToArray();
                            }
                        }

                        SelectionUtility.DoSelectionClick();
                        Event.current.Use();
                    }
                }
                rectClickDown = false;
                break;
            }


            case EventType.ValidateCommand:
            {
                if (Event.current.commandName == "SelectAll")
                {
                    Event.current.Use();
                    break;
                }
                if (Keys.HandleSceneValidate(CSGBrushEditorManager.CurrentTool, true))
                {
                    Event.current.Use();
                    HandleUtility.Repaint();
                }
                break;
            }

            case EventType.ExecuteCommand:
            {
                if (Event.current.commandName == "SelectAll")
                {
                    var transforms = new List <UnityEngine.Object>();
                    for (int sceneIndex = 0; sceneIndex < SceneManager.sceneCount; sceneIndex++)
                    {
                        var scene = SceneManager.GetSceneAt(sceneIndex);
                        foreach (var gameObject in scene.GetRootGameObjects())
                        {
                            foreach (var transform in gameObject.GetComponentsInChildren <Transform>())
                            {
                                if ((transform.hideFlags & (HideFlags.NotEditable | HideFlags.HideInHierarchy)) == (HideFlags.NotEditable | HideFlags.HideInHierarchy))
                                {
                                    continue;
                                }
                                transforms.Add(transform.gameObject);
                            }
                        }
                    }
                    Selection.objects = transforms.ToArray();

                    Event.current.Use();
                    break;
                }
                break;
            }

            case EventType.KeyDown:
            {
                if (Keys.HandleSceneKeyDown(CSGBrushEditorManager.CurrentTool, true))
                {
                    Event.current.Use();
                    HandleUtility.Repaint();
                }
                break;
            }

            case EventType.KeyUp:
            {
                if (Keys.HandleSceneKeyUp(CSGBrushEditorManager.CurrentTool, true))
                {
                    Event.current.Use();
                    HandleUtility.Repaint();
                }
                break;
            }

            case EventType.Layout:
            {
                if (currentDragTool != null)
                {
                    currentDragTool.Layout();
                }
                break;
            }

            case EventType.Repaint:
            {
                break;
            }
            }

            CSGBrushEditorManager.UpdateSelection();
            //bool fallbackGUI = EditorWindow.focusedWindow != sceneView;
            //fallbackGUI =
            CSGBrushEditorManager.InitSceneGUI(sceneView);                    // || fallbackGUI;
            //fallbackGUI = true;


            if (Event.current.type == EventType.repaint)
            {
                MeshInstanceManager.RenderHelperSurfaces(sceneView.camera);
            }

            if (Event.current.type == EventType.repaint)
            {
                if (currentDragTool != null)
                {
                    currentDragTool.OnPaint();
                }

                SceneTools.OnPaint(sceneView);
            }
            else
            //if (fallbackGUI)
            {
                BottomBarGUI.ShowGUI(sceneView);
            }


            CSGBrushEditorManager.OnSceneGUI(sceneView);

            //if (fallbackGUI)
            {
                TooltipUtility.InitToolTip(sceneView);
                if (Event.current.type == EventType.repaint)
                {
                    BottomBarGUI.ShowGUI(sceneView);
                }
                if (!mousePressed)
                {
                    Handles.BeginGUI();
                    TooltipUtility.DrawToolTip(getLastRect: false);
                    Handles.EndGUI();
                }
            }
        }