From 6f44ea6b5ac9449bd2ee912ce0a9fc727a4e5f07 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Wed, 3 May 2023 20:56:58 +0200 Subject: [PATCH] add haptic feedback on scroll --- bindings/action_manifest.json | 8 +++++++- bindings/index_controller.json | 10 ++++++++++ src/app.cpp | 2 ++ src/app.h | 1 + src/controller.cpp | 4 ++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/bindings/action_manifest.json b/bindings/action_manifest.json index d4621c1..0c9128e 100644 --- a/bindings/action_manifest.json +++ b/bindings/action_manifest.json @@ -55,6 +55,11 @@ "name": "/actions/cursor/in/scroll", "requirement": "suggested", "type": "vector2" + }, + { + "name": "/actions/cursor/out/scroll_haptic", + "requirement": "suggested", + "type": "vibration" } ], "action_sets": [ @@ -83,7 +88,8 @@ "/actions/cursor/in/mouse_left": "left mouse button", "/actions/cursor/in/mouse_right": "right mouse button", "/actions/cursor/in/mouse_middle": "middle mouse button", - "/actions/cursor/in/scroll": "scroll" + "/actions/cursor/in/scroll": "scroll", + "/actions/cursor/out/scroll_haptic": "scrolling haptic feedback" } ] } \ No newline at end of file diff --git a/bindings/index_controller.json b/bindings/index_controller.json index de796c5..f42c299 100644 --- a/bindings/index_controller.json +++ b/bindings/index_controller.json @@ -141,6 +141,16 @@ "app_key" : "system.generated.sinpin_vr", "bindings" : { "/actions/cursor" : { + "haptics" : [ + { + "output" : "/actions/cursor/out/scroll_haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/cursor/out/scroll_haptic", + "path" : "/user/hand/right/output/haptic" + } + ], "sources" : [ { "inputs" : { diff --git a/src/app.cpp b/src/app.cpp index caa4500..72ff00a 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -75,6 +75,8 @@ App::App() assert(action_err == 0); action_err = vr_input->GetActionHandle("/actions/cursor/in/scroll", &_input_handles.cursor.scroll); assert(action_err == 0); + action_err = vr_input->GetActionHandle("/actions/cursor/out/scroll_haptic", &_input_handles.cursor.scroll_haptic); + assert(action_err == 0); action_err = vr_input->GetActionSetHandle("/actions/main", &_input_handles.main_set); assert(action_err == 0); action_err = vr_input->GetActionSetHandle("/actions/edit", &_input_handles.edit_set); diff --git a/src/app.h b/src/app.h index 232f74a..fa721ce 100644 --- a/src/app.h +++ b/src/app.h @@ -32,6 +32,7 @@ struct InputHandles vr::VRActionHandle_t mouse_right; vr::VRActionHandle_t mouse_middle; vr::VRActionHandle_t scroll; + vr::VRActionHandle_t scroll_haptic; } cursor; vr::VRActionSetHandle_t cursor_set; struct diff --git a/src/controller.cpp b/src/controller.cpp index 9597303..a9931de 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -8,6 +8,8 @@ const float LASER_WIDTH = 0.004f; const Color EDIT_COLOR{1, 0.6f, 1}; const Color CURSOR_COLOR{0.3f, 1, 1}; const float SCROLL_SPEED = 48; +const float SCROLL_HAPTIC_STRENGTH = 0.15f; +const float SCROLL_HAPTIC_TIME = 0.1f; const float MOUSE_DRAG_THRESHOLD = 48; Controller::Controller(App *app, ControllerSide side) @@ -161,11 +163,13 @@ void Controller::Update(float dtime) { _app->SendMouseInput(4, true); _app->SendMouseInput(4, false); + _app->vr_input->TriggerHapticVibrationAction(_app->_input_handles.cursor.scroll_haptic, 0, SCROLL_HAPTIC_TIME, 1 / SCROLL_HAPTIC_TIME, SCROLL_HAPTIC_STRENGTH, _input_handle); } else if (scroll_state.y < 0) { _app->SendMouseInput(5, true); _app->SendMouseInput(5, false); + _app->vr_input->TriggerHapticVibrationAction(_app->_input_handles.cursor.scroll_haptic, 0, SCROLL_HAPTIC_TIME, 1 / SCROLL_HAPTIC_TIME, SCROLL_HAPTIC_STRENGTH, _input_handle); } } }