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 #2
0
 // Scene View
 public static GUIStyle SceneViewTool(bool closeLeft, bool closeRight)
 {
     return(LudiqStyles.CommandButtonCompact(closeLeft, closeRight));
 }