Exemple #1
0
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (PeekPlugin.Configuration.sceneHierarchyShortcut.Check(e))
            {
                var width = Mathf.Min(sceneView.position.width * 0.9f, 400);

                var activator = new Rect
                                (
                    (sceneView.position.width - width) / 2,
                    -1,
                    width,
                    0
                                );

                activator = LudiqGUIUtility.GUIToScreenRect(activator);

                HierarchyPopup.Show(activator);
                e.Use();
            }
        }
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (e.type == EventType.KeyDown &&
                (
                    (PeekPlugin.Configuration.enableHierarchySpaceShortcut && e.modifiers == EventModifiers.None && e.keyCode == KeyCode.Space) ||
                    (PeekPlugin.Configuration.enableHierarchyFindShortcut && e.CtrlOrCmd() && e.keyCode == KeyCode.F && !e.shift && !e.alt)))
            {
                var width = Mathf.Min(sceneView.position.width * 0.9f, 400);

                var activator = new Rect
                                (
                    (sceneView.position.width - width) / 2,
                    -1,
                    width,
                    0
                                );

                activator = LudiqGUIUtility.GUIToScreenRect(activator);

                HierarchyPopup.Show(activator);
                e.Use();
            }
        }
        protected override void ContextClickedItem(int id)
        {
            var item = FindItem(id, rootItem);

            if (item is GameObjectItem gameObjectItem)
            {
                var selection = selectedGameObjects;

                GenericMenu.MenuFunction rename = null;

                if (selection.Length == 1)
                {
                    rename = () => BeginRename(gameObjectItem);
                }

                var activatorPosition = LudiqGUIUtility.GUIToScreenRect(GetItemRect(id));

                var menu = new GenericMenu();
                menu.allowDuplicateNames = true;
                GameObjectContextMenu.Fill(selection, menu, activatorPosition, rename);
                menu.ShowAsContext();
            }
        }
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (!PeekPlugin.Configuration.enableCreator.Display(sceneView.maximized))
            {
                return;
            }

            if (SceneViewIntegration.used)
            {
                return;
            }

            try
            {
                Profiler.BeginSample("Peek." + nameof(Creator));

                var position = sceneView.GetInnerGuiPosition();

                var shortcut = PeekPlugin.Configuration.creatorShortcut;
                var preview  = shortcut.Preview(e);
                var activate = shortcut.Check(e);

                if (position.Contains(e.mousePosition) && (preview || activate))
                {
                    Handles.BeginGUI();

                    var filter = ProbeFilter.@default;
                    filter.proBuilder = false;                     // Too slow and useless here anyway
                    var hit = Probe.Pick(filter, sceneView, e.mousePosition, out var point);

                    if (preview)
                    {
                        var createIndicatorStyle   = LudiqStyles.CommandButton(true, true);
                        var createIndicatorContent = LudiqGUIUtility.TempContent(PeekPlugin.Icons.createGameObjectOptions?[IconSize.Small]);
                        var createIndicatorSize    = createIndicatorStyle.CalcSize(createIndicatorContent);

                        var createIndicatorPosition = new Rect
                                                      (
                            e.mousePosition.x - (createIndicatorSize.x / 2),
                            e.mousePosition.y + Styles.indicatorMargin,
                            createIndicatorSize.x,
                            createIndicatorSize.y
                                                      );

                        GUI.Label
                        (
                            createIndicatorPosition,
                            createIndicatorContent,
                            createIndicatorStyle
                        );
                    }

                    if (activate)
                    {
                        var activatorPosition = new Rect(e.mousePosition, Vector2.zero);
                        activatorPosition.width = 220;
                        activatorPosition       = LudiqGUIUtility.GUIToScreenRect(activatorPosition);

                        // Delay closure allocations
                        var _hit       = hit;
                        var _point     = point;
                        var _sceneView = sceneView;

                        LudiqGUI.FuzzyDropdown
                        (
                            activatorPosition,
                            new CreateGameObjectOptionTree(),
                            null,
                            (_instance) =>
                        {
                            var instance = (GameObject)_instance;

                            var is2D = instance.GetComponent <RectTransform>() != null ||
                                       instance.GetComponent <SpriteRenderer>() != null;

                            if (_hit != null)
                            {
                                instance.transform.SetParent(_hit.Value.transform.parent, true);
                            }

                            instance.transform.position = _point;

                            if (!is2D && PeekPlugin.Configuration.createOnBounds && instance.CalculateBounds(out var bounds, Space.World, true, false, false, false, false))
                            {
                                var difference = _point.y - bounds.min.y;

                                instance.transform.position += difference * Vector3.up;
                            }

                            Selection.activeGameObject = instance;

                            if (_hit == null && !_sceneView.in2DMode)
                            {
                                _sceneView.FrameSelected();
                            }
                        }
                        );

                        FuzzyWindow.instance.Focus();

                        e.Use();
                    }
Exemple #5
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            if (PeekPlugin.Configuration.enableReferenceInspector && !property.hasMultipleDifferentValues && property.objectReferenceValue != null)
            {
                Rect buttonPosition, fieldPosition;

                if (label != GUIContent.none)
                {
                    buttonPosition = new Rect
                                     (
                        position.x + EditorGUIUtility.labelWidth - IconSize.Small - 1,
                        position.y,
                        IconSize.Small,
                        IconSize.Small
                                     );

                    fieldPosition = position;
                }
                else
                {
                    buttonPosition = new Rect
                                     (
                        position.xMax - IconSize.Small,
                        position.y + 1,
                        IconSize.Small,
                        IconSize.Small
                                     );

                    fieldPosition = new Rect
                                    (
                        position.x,
                        position.y,
                        position.width - buttonPosition.width - 2,
                        position.height
                                    );
                }

                DefaultField(property, label, fieldPosition);

                var isActive = PopupWatcher.IsOpenOrJustClosed(lastPopup);

                var activatedButton = LudiqGUI.DropdownToggle(buttonPosition, isActive, LudiqGUIUtility.TempContent(PeekPlugin.Icons.propertyDrawer?[IconSize.Small]), GUIStyle.none);

                if (activatedButton && !isActive)
                {
                    PopupWatcher.Release(lastPopup);
                    lastPopup = null;

                    var targets = new[] { property.objectReferenceValue };
                    var activatorGuiPosition    = buttonPosition;
                    var activatorScreenPosition = LudiqGUIUtility.GUIToScreenRect(activatorGuiPosition);

                    if (e.IsContextMouseButton())
                    {
                        if (property.objectReferenceValue is GameObject go)
                        {
                            GameObjectContextMenu.Open(new[] { go }, activatorScreenPosition);
                        }
                        else
                        {
                            UnityObjectContextMenu.Open(targets, activatorGuiPosition);
                        }
                    }
                    else
                    {
                        lastPopup = EditorPopup.Open(targets, activatorScreenPosition);
                        PopupWatcher.Watch(lastPopup);
                    }
                }
            }
            else
            {
                DefaultField(property, label, position);
            }
        }
Exemple #6
0
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (!PeekPlugin.Configuration.enableProbe)
            {
                return;
            }

            Profiler.BeginSample("Peek." + nameof(Probe));

            try
            {
                ProgramHighlight(sceneView);

#if PROBUILDER_4_OR_NEWER
                PeekProBuilderIntegration.DrawHighlight(proBuilderHighlight);
#endif

                var shortcut = PeekPlugin.Configuration.probeShortcut;

                // Make sure not to conflict with right-click pan
                shortcut.mouseShortcut.checkRelease         = true;
                shortcut.mouseShortcut.requireStaticRelease = true;

                if (shortcut.Check(e) && !SceneViewIntegration.used)
                {
                    var hits = ListPool <ProbeHit> .New();

                    try
                    {
                        PickAllNonAlloc(hits, ProbeFilter.@default, sceneView, e.mousePosition, PeekPlugin.Configuration.probeLimit);

                        if (hits.Count > 0)
                        {
                            var add = e.shift;

                            var activatorPosition = new Rect(e.mousePosition, Vector2.zero);
                            activatorPosition.width = 220;
                            activatorPosition       = LudiqGUIUtility.GUIToScreenRect(activatorPosition);

                            // Note: Had to make FuzzyWindow use OnMouseUp for select here instead
                            // of OnMouseDown because otherwise escaping the default RectSelection
                            // behaviour with the event order and DefaultControl ID's was... hell.

                            LudiqGUI.FuzzyDropdown
                            (
                                activatorPosition,
                                new ProbeOptionTree(hits),
                                null,
                                (_hit) =>
                            {
                                add    |= e?.shift ?? false;
                                var hit = (ProbeHit)_hit;
                                hit.Select(add);
                            }
                            );

                            FuzzyWindow.instance.Focus();
                            GUIUtility.hotControl = 0;                             // Escape the default RectSelection control
                            e.Use();
                        }
                    }
                    finally
                    {
                        hits.Free();
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
            }

            Profiler.EndSample();
        }
Exemple #7
0
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (!PeekPlugin.Configuration.enableProbe)
            {
                return;
            }

            Profiler.BeginSample("Peek." + nameof(Probe));

            try
            {
                ProgramHighlight(sceneView);

#if PROBUILDER_4_OR_NEWER
                PeekProBuilderIntegration.DrawHighlight(proBuilderHighlight);
#endif

                if (e.type == EventType.KeyDown && e.keyCode == KeyCode.Alpha0)
                {
                    Selection.activeGameObject = sceneView.camera.gameObject;
                }

                if (e.IsContextMouseButton() && !e.alt && !e.CtrlOrCmd() && !SceneViewIntegration.used)
                {
                    if (e.type == EventType.MouseDown)
                    {
                        pressPosition = e.mousePosition;
                    }
                    else if (e.type == EventType.MouseUp)
                    {
                        if (pressPosition.HasValue)
                        {
                            var pressDistance = Vector2.Distance(e.mousePosition, pressPosition.Value);

                            if (pressDistance <= 1)
                            {
                                var hits = ListPool <ProbeHit> .New();

                                try
                                {
                                    PickAllNonAlloc(hits, ProbeFilter.@default, sceneView, e.mousePosition, PeekPlugin.Configuration.probeLimit);

                                    if (hits.Count > 0)
                                    {
                                        var add = e.shift;

                                        var activatorPosition = new Rect(e.mousePosition, Vector2.zero);
                                        activatorPosition.width = 220;
                                        activatorPosition       = LudiqGUIUtility.GUIToScreenRect(activatorPosition);

                                        // Note: Had to make FuzzyWindow use OnMouseUp for select here instead
                                        // of OnMouseDown because otherwise escaping the default RectSelection
                                        // behaviour with the event order and DefaultControl ID's was... hell.

                                        LudiqGUI.FuzzyDropdown
                                        (
                                            activatorPosition,
                                            new ProbeOptionTree(hits),
                                            null,
                                            (_hit) =>
                                        {
                                            add    |= e?.shift ?? false;
                                            var hit = (ProbeHit)_hit;
                                            hit.Select(add);
                                        }
                                        );

                                        FuzzyWindow.instance.Focus();
                                        GUIUtility.hotControl = 0;                                         // Escape the default RectSelection control
                                        e.Use();
                                    }
                                }
                                finally
                                {
                                    hits.Free();
                                }
                            }

                            pressPosition = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
            }

            Profiler.EndSample();
        }