From 8f0c5f153695b1297054cf344134459b342d43a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= <tmueller@nvidia.com> Date: Tue, 31 Jan 2023 09:50:43 +0100 Subject: [PATCH] VR: allow grabbing with the squeeze action (in addition to trigger) --- src/openxr_hmd.cu | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/openxr_hmd.cu b/src/openxr_hmd.cu index 9607372..b7d2cd4 100644 --- a/src/openxr_hmd.cu +++ b/src/openxr_hmd.cu @@ -553,8 +553,8 @@ void OpenXRHMD::init_xr_actions() { create_binding(m_pose_action, "/user/hand/right/input/grip/pose"), }); - auto suggest_controller_bindings = [&](const std::string& xy, const std::string& press, const std::string& grab, const std::string& interaction_profile_path_str) { - suggest_bindings(interaction_profile_path_str, { + auto suggest_controller_bindings = [&](const std::string& xy, const std::string& press, const std::string& grab, const std::string& squeeze, const std::string& interaction_profile_path_str) { + std::vector<XrActionSuggestedBinding> bindings = { create_binding(m_pose_action, "/user/hand/left/input/grip/pose"), create_binding(m_pose_action, "/user/hand/right/input/grip/pose"), create_binding(m_thumbstick_actions[0], std::string{"/user/hand/left/input/"} + xy), @@ -563,15 +563,24 @@ void OpenXRHMD::init_xr_actions() { create_binding(m_press_action, std::string{"/user/hand/right/input/"} + press), create_binding(m_grab_action, std::string{"/user/hand/left/input/"} + grab), create_binding(m_grab_action, std::string{"/user/hand/right/input/"} + grab), - }); + }; + + if (!squeeze.empty()) { + bindings.emplace_back(create_binding(m_grab_action, std::string{"/user/hand/left/input/"} + squeeze)); + bindings.emplace_back(create_binding(m_grab_action, std::string{"/user/hand/right/input/"} + squeeze)); + } + + suggest_bindings(interaction_profile_path_str, bindings); }; - suggest_controller_bindings("trackpad", "select/click", "trackpad/click", "/interaction_profiles/google/daydream_controller"); - suggest_controller_bindings("trackpad", "trackpad/click", "trigger/click", "/interaction_profiles/htc/vive_controller"); - suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", "/interaction_profiles/microsoft/motion_controller"); - suggest_controller_bindings("trackpad", "trackpad/click", "trigger/click", "/interaction_profiles/oculus/go_controller"); - suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", "/interaction_profiles/oculus/touch_controller"); - suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", "/interaction_profiles/valve/index_controller"); + suggest_controller_bindings("trackpad", "select/click", "trackpad/click", "", "/interaction_profiles/google/daydream_controller"); + suggest_controller_bindings("trackpad", "trackpad/click", "trigger/click", "squeeze/click", "/interaction_profiles/htc/vive_controller"); + suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", "squeeze/click", "/interaction_profiles/microsoft/motion_controller"); + suggest_controller_bindings("trackpad", "trackpad/click", "trigger/click", "", "/interaction_profiles/oculus/go_controller"); + suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", "squeeze/value", "/interaction_profiles/oculus/touch_controller"); + + // Valve Index force squeeze is very sensitive and can cause unwanted grabbing. Only permit trigger-grabbing for now. + suggest_controller_bindings("thumbstick", "thumbstick/click", "trigger/value", ""/*squeeze/force*/, "/interaction_profiles/valve/index_controller"); // Xbox controller (currently not functional) suggest_bindings("/interaction_profiles/microsoft/xbox_controller", { -- GitLab