feat(input): trigger selects in the browser, grip toggles the laser, downloads window replaces the browser

- Restore trigger-to-select in the file browser (it is the intuitive gesture);
  A remains an alternative for thumbstick/d-pad navigation. Both skip when the
  laser is resting on a control-bar button, which owns that click.
- Grip now toggles that hand's laser pointer, SteamVR-style: turn one off to
  drive a panel with the stick without the beam fighting it, and to pick the
  pointing hand. The raycast and the beam both honour it per hand.
- Recenter moves from Grip to Bumper (saved grip bindings migrate), since Grip
  is now the laser toggle.
- The downloads window replaces the browser panel instead of stacking over it,
  and browser input is suspended while it (or the confirm dialog) is open.
This commit is contained in:
Pixelplanet committed 2026-10-15 20:52:38 +02:00
1 parent e39fd5e77c
commit ee95d79efe
8 files changed
+84 -28

No files matched your search

+4 -3
View File
@@ -1015,9 +1015,10 @@ void VulkanRenderer::updatePointer() {
}
const Mat4 inv = rigidInverse(panelBase);
// Prefer the right hand; fall back to the left.
// Prefer the right hand; fall back to the left. A hand whose laser is off
// takes no part in the raycast.
for (int h : {1, 0}) {
if (!controllers_[h].active) {
if (!controllers_[h].active || !laserOn_[h]) {
continue;
}
const Quat q{controllers_[h].orientation[0], controllers_[h].orientation[1],
@@ -2151,7 +2152,7 @@ void VulkanRenderer::renderView(uint32_t viewIndex, uint32_t imageIndex,
const float rayCol[4] = {0.25f, 0.60f, 1.0f, 0.85f};
const float cursorCol[4] = {1.0f, 1.0f, 1.0f, 0.95f};
for (int h = 0; h < 2; ++h) {
if (!controllers_[h].active) {
if (!controllers_[h].active || !laserOn_[h]) {
continue;
}
const Quat q{controllers_[h].orientation[0],