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(); }
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); } }
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(); }
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(); }