When selecting 3d nodes with a single click, the node closest to the
camera is selected. If the closest node was locked, it would block the
selection, even when there was unlocked nodes behind the locked node.
This PR replaces the `_select_ray` method call used to find the closest
node with the similar `_find_items_at_pos` method, which can skip any
locked nodes.
Fixes#84764
The issue was that Node3DEditorViewport was using the render server's BVH to filter out nodes,
which is not correct for gizmos that have no renderable components,
or have collision triangles that exceed the bounds of their renderable components.
This commit adds 3 new editor settings for orbit, pan, and zoom mouse buttons, and 6 new shortcuts which act as modifiers for the navigation controls. These new shortcuts replace the old orbit, pan, and zoom modifier settings.
The `navigation_scheme` setting now acts as a preset which changes the new options added above, and the new settings are what drives 3D navigation instead. A new struct is used for ordering the navigation logic so that actions with fewer shortcuts are checked first. When the editor starts, the preset detection will run to automatically update user settings from old Godot versions. When the setting is changed, the hint values for the mouse buttons are dynamically updated to show the user the corresponding shortcut values.
The new doc fields have been generated and the description for the new settings are filled out. The `navigation_scheme` entry now has more consistent styling and added control descriptions that were missing before.
The new shortcut is Ctrl + Alt + Numpad 0 and is the one listed
in the 3D viewport's Perspective menu (since PopupMenu accelerators
display the first shortcut only). This shortcut matches Blender
and avoids conflicts with the GeForce Experience overlay, which
defaults to Ctrl + Alt + M.
Ctrl + Alt + M is still defined as an alternative default,
so that existing workflows are not impacted.
- Create AudioStreamPlayer if dropped in between nodes in the Scene dock
- Create AudioStreamPlayer2D if dropped into 2D editor
- Create AudioStreamPlayer3D if dropped into 3D editor
Random-access access to `List` when iterating is `O(n^2)` (`O(n)` when
accessing a single element)
* Removed subscript operator, in favor of a more explicit `get`
* Added conversion from `Iterator` to `ConstIterator`
* Remade existing operations into other solutions when applicable