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

+6 -1
View File
@@ -343,7 +343,12 @@ void SettingsMenu::loadConfig() {
else if (key == "distance") screenDistance_ = std::clamp(std::stof(val), 1.0f, 10.0f);
else if (key == "bind_play_btn") bindPlayBtn_ = std::clamp(std::stoi(val), 0, kButtonCount - 1);
else if (key == "bind_menu_btn") bindMenuBtn_ = std::clamp(std::stoi(val), 0, kButtonCount - 1);
else if (key == "bind_recenter_btn") bindRecenterBtn_ = std::clamp(std::stoi(val), 0, kButtonCount - 1);
else if (key == "bind_recenter_btn") {
const int b = std::clamp(std::stoi(val), 0, kButtonCount - 1);
// Grip used to default to recenter; it now toggles the laser pointer,
// so a saved grip binding is migrated to the new default (Bumper).
bindRecenterBtn_ = (b == 8) ? 6 : b;
}
else if (key == "download_dir") downloadDirIdx_ = std::clamp(std::stoi(val), 0, kDownloadDirCount - 1);
else if (key == "audio_lang") audioLangIdx_ = std::clamp(std::stoi(val), 0, kLangCount - 1);
}