From 3c5cab72e54a45fd55ea9cc9823fa150bcd3a772 Mon Sep 17 00:00:00 2001 From: ykeara Date: Fri, 15 Mar 2019 15:19:23 -0500 Subject: [PATCH] Chaperone Tab Update (#101) * added actions for haptics * Haptic WIP #1 crash on haptic event * haptics rough implemented * fixed action names and prox sensor work-around * added workaround to catch-all in begineer chaperone switch * added idle work-around to alarm warning * changed visibility slider values to reflect new API limits * added disable chaperone * added display Logic * fixed visibility slider display and some saving fade distance when chaperone disabled * fixed warnings not always working (hopefully) centralized action/input keys into ivrinput.h * default bindings for HMD's * chaperone input re-factor * refactored ivrinput class * fixed naming errors commented out prox testing * formatting removed commented code * format * fixed compiler warnings * updated documentation * Reduced reload chaperone calls * adjusted haptics for chaperone bounds warnings --- Readme.md | 3 +- build_scripts/qt/sources.pri | 1 + docs/screenshots/ChaperonePage.png | Bin 42772 -> 76622 bytes src/openvr/ivrinput.cpp | 88 +++++++---- src/openvr/ivrinput.h | 42 ++++- src/openvr/ivrinput_action.h | 1 + src/openvr/ivrinput_input_source.h | 45 ++++++ src/overlaycontroller.cpp | 11 ++ src/package_files/action_manifest.json | 25 ++- .../generic_hmd_defaults.json | 23 +++ .../vive_hmd_defaults.json | 23 +++ src/res/qml/ChaperonePage.qml | 69 ++++++-- src/tabcontrollers/ChaperoneTabController.cpp | 149 ++++++++++++++---- src/tabcontrollers/ChaperoneTabController.h | 22 +++ 14 files changed, 425 insertions(+), 77 deletions(-) create mode 100644 src/openvr/ivrinput_input_source.h create mode 100644 src/package_files/default_action_manifests/generic_hmd_defaults.json create mode 100644 src/package_files/default_action_manifests/vive_hmd_defaults.json diff --git a/Readme.md b/Readme.md index 6d0aa51..9948e52 100644 --- a/Readme.md +++ b/Readme.md @@ -147,12 +147,13 @@ These version are not stable and this should be considered for advanced users on ![Chaperone Page](docs/screenshots/ChaperonePage.png) - **Profile**: Allows to apply/define/delete chaperone profiles that save geometry info, style info or other chaperone settings (What exactly is saved in a chaperone profile can be selected when a profile is created). -- **Visibility**: Allows to configure the visibility of the chaperone bounds. Unlike the slider in the chaperone settings, this one is not capped at 30%. When set to 0 chaperone bounds are completely invisible. +- **Visibility**: Allows to configure the visibility of the chaperone bounds. 50% to 100% opacity. - **Fade Distance**: Allows to configure the distance at which the chaperone bounds are shown. When set to 0 chaperone bounds are completely invisible. - **Height**: Allows to configure the height of the chaperone bounds. - **Center Marker**: Displays a marker that represents the center of the playspace. - **Play Space Maker**: Displays the outlines of the rectangle representing the playspace. - **Force Bounds**: Force chaperone bounds always on. +- **Disable Chaperone**: Disables Chaperone by setting fade distance to 0.0. - **Proximity Warning Settings**: Opens a page that allows to configure several warning methods for when the user comes too close to the chaperone bounds. - **Flip Orientation**: Flips the orientation of the play space. - **Reload from Disk**: Reloads the chaperone bounds geometry from disk. diff --git a/build_scripts/qt/sources.pri b/build_scripts/qt/sources.pri index ffa12c1..5d38de3 100644 --- a/build_scripts/qt/sources.pri +++ b/build_scripts/qt/sources.pri @@ -39,6 +39,7 @@ HEADERS += src/overlaycontroller.h \ src/openvr/ivrinput_action.h \ src/openvr/ivrinput_manifest.h \ src/openvr/ivrinput_action_set.h \ + src/openvr/ivrinput_input_source.h \ src/openvr/ivrinput.h \ src/utils/setup.h diff --git a/docs/screenshots/ChaperonePage.png b/docs/screenshots/ChaperonePage.png index 27c1806d224c7e72e87524d2df797cdec3b8de32..e9bed538ebd1f5b1a72882ca1362f29518ecbfef 100644 GIT binary patch literal 76622 zcmdqJcT`hv(>97f3km`@P`aW>6I3A5K|w&eln`nVkuD%55JIy73Ifu5uSp1zE|7qN z5~V{3NDCrDAOS)PCA2T-^StYM-*djd&N^$I^X;`*?Ck7)GxyAW&&+krY~DUJ)MjJh zVPRroV$*qW--LRGm9q~2MR%fc{;hSfCIOcrM;2slGWgP3S z{c*gD7YVDIC|r0wJA=;`a?Z zsdN9H85F!Q5gBxW@ate@@?b@?54njr13P=}q-0WGkjS;y0+-i`K?Wc4gmllcioUr3 zHz@)gm(WZiy3Z8_hblE?K9N&!ZQ_-Fv8mikX&6qIaqj6^_|y~W+q2tp5Y!aKkm2x9 z62koR=j6G^S@4lRXP@d$GA4LK3{E_o5z=`jsz^1Y3ZlIO+HVxJN&)x@&V@k z6fm5}p!RoXGHh!u{`ULTuWgYWwR6#4W|dB+)3^Ux<_z?v8I(5ZQ@g%Wa5G!uh`|xF z%NAFLN^{YDnVfFCV}D0`{wdJD6-&Cykq}b4xdEVr-1RlK4&QJgs23rez_!V87r`3 zFkSLhDe`;<`P(-{wQhDwhN5$G=mDjuvd64?a_5UB(TwA-5WA*jZOF&>fZ1yg)76DL zsK;2drdkBxkyQ1pxvJ8{h7@0~}?MHzQKu-cueZ$C3%?I@9TzCLq<^>v;&troWD zG+l`jusD6?*q@tEW~p<7Eq!eqPsf%kptTIMJZ=cOnBN6ZCXT0%K1yHPSD#k>JLvhwaufmxgx4gku^#Hq5A+D;T9| zSJ4+K7*hWBd}*1pnKQ85%s}(>POmDvzh?4!L>7&G80-XLbw-*?w5iTs+-FVS9g zDB#Z~hI}FGBNx+O3c1Hhn2wOX@~CfhlWFOrw0Y9;F{y)agw6e|W<{uBeQwEhBg-2) zMt+p8dm*Y0Z`{l)GT;@`m1<;IRMXQAHq>>D`jt)Hul`Y?UdT`^O&@NzSe{aZtM^;| z

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 a`)Fp|&=v(2gAlfRn5Lns4XjkQiu^zMTEdM0 diff --git a/src/openvr/ivrinput.cpp b/src/openvr/ivrinput.cpp index c13c0ca..6346e1b 100644 --- a/src/openvr/ivrinput.cpp +++ b/src/openvr/ivrinput.cpp @@ -123,56 +123,57 @@ Wrong action names may not result in direct error messages, but just features mystically not working. */ SteamIVRInput::SteamIVRInput() - : m_manifest(), m_mainSet( input_strings::k_setMain ), - m_nextTrack( input_strings::k_actionNextTrack, ActionType::Digital ), - m_previousTrack( input_strings::k_actionPreviousTrack, + : m_manifest(), m_mainSet( action_sets::k_setMain ), + m_nextTrack( action_keys::k_actionNextTrack, ActionType::Digital ), + m_previousTrack( action_keys::k_actionPreviousTrack, ActionType::Digital ), - m_pausePlayTrack( input_strings::k_actionPausePlayTrack, + m_pausePlayTrack( action_keys::k_actionPausePlayTrack, ActionType::Digital ), - m_stopTrack( input_strings::k_actionStopTrack, ActionType::Digital ), - m_leftHandSpaceTurn( input_strings::k_actionLeftHandSpaceTurn, + m_stopTrack( action_keys::k_actionStopTrack, ActionType::Digital ), + m_leftHandSpaceTurn( action_keys::k_actionLeftHandSpaceTurn, ActionType::Digital ), - m_rightHandSpaceTurn( input_strings::k_actionRightHandSpaceTurn, + m_rightHandSpaceTurn( action_keys::k_actionRightHandSpaceTurn, ActionType::Digital ), - m_leftHandSpaceDrag( input_strings::k_actionLeftHandSpaceDrag, + m_leftHandSpaceDrag( action_keys::k_actionLeftHandSpaceDrag, ActionType::Digital ), - m_rightHandSpaceDrag( input_strings::k_actionRightHandSpaceDrag, + m_rightHandSpaceDrag( action_keys::k_actionRightHandSpaceDrag, ActionType::Digital ), m_optionalOverrideLeftHandSpaceTurn( - input_strings::k_actionOptionalOverrideLeftHandSpaceTurn, + action_keys::k_actionOptionalOverrideLeftHandSpaceTurn, ActionType::Digital ), m_optionalOverrideRightHandSpaceTurn( - input_strings::k_actionOptionalOverrideRightHandSpaceTurn, + action_keys::k_actionOptionalOverrideRightHandSpaceTurn, ActionType::Digital ), m_optionalOverrideLeftHandSpaceDrag( - input_strings::k_actionOptionalOverrideLeftHandSpaceDrag, + action_keys::k_actionOptionalOverrideLeftHandSpaceDrag, ActionType::Digital ), m_optionalOverrideRightHandSpaceDrag( - input_strings::k_actionOptionalOverrideRightHandSpaceDrag, + action_keys::k_actionOptionalOverrideRightHandSpaceDrag, ActionType::Digital ), m_swapSpaceDragToLeftHandOverride( - input_strings::k_actionSwapSpaceDragToLeftHandOverride, + action_keys::k_actionSwapSpaceDragToLeftHandOverride, ActionType::Digital ), m_swapSpaceDragToRightHandOverride( - input_strings::k_actionSwapSpaceDragToRightHandOverride, + action_keys::k_actionSwapSpaceDragToRightHandOverride, ActionType::Digital ), - m_gravityToggle( input_strings::k_actionGravityToggle, + m_gravityToggle( action_keys::k_actionGravityToggle, ActionType::Digital ), - m_heightToggle( input_strings::k_actionHeightToggle, - ActionType::Digital ), - m_resetOffsets( input_strings::k_actionResetOffsets, - ActionType::Digital ), - m_snapTurnLeft( input_strings::k_actionSnapTurnLeft, - ActionType::Digital ), - m_snapTurnRight( input_strings::k_actionSnapTurnRight, + m_heightToggle( action_keys::k_actionHeightToggle, ActionType::Digital ), + m_resetOffsets( action_keys::k_actionResetOffsets, ActionType::Digital ), + m_snapTurnLeft( action_keys::k_actionSnapTurnLeft, ActionType::Digital ), + m_snapTurnRight( action_keys::k_actionSnapTurnRight, ActionType::Digital ), - m_xAxisLockToggle( input_strings::k_actionXAxisLockToggle, + m_xAxisLockToggle( action_keys::k_actionXAxisLockToggle, ActionType::Digital ), - m_yAxisLockToggle( input_strings::k_actionYAxisLockToggle, + m_yAxisLockToggle( action_keys::k_actionYAxisLockToggle, ActionType::Digital ), - m_zAxisLockToggle( input_strings::k_actionZAxisLockToggle, + m_zAxisLockToggle( action_keys::k_actionZAxisLockToggle, ActionType::Digital ), - m_pushToTalk( input_strings::k_actionPushToTalk, ActionType::Digital ) + m_pushToTalk( action_keys::k_actionPushToTalk, ActionType::Digital ), + m_leftHaptic( action_keys::k_actionHapticsLeft, ActionType::Haptic ), + m_rightHaptic( action_keys::k_actionHapticsRight, ActionType::Haptic ), + m_leftHand( input_keys::k_inputSourceLeft ), + m_rightHand( input_keys::k_inputSourceRight ) { m_activeActionSet.ulActionSet = m_mainSet.handle(); m_activeActionSet.ulRestrictedToDevice = vr::k_ulInvalidInputValueHandle; @@ -322,6 +323,39 @@ bool SteamIVRInput::pushToTalk() return isDigitalActionActivatedConstant( m_pushToTalk ); } +/*! +Returns the action handle of the Left Haptic Action +*/ + +vr::VRActionHandle_t SteamIVRInput::leftHapticActionHandle() +{ + return m_leftHaptic.handle(); +} + +/*! +Returns the action handle of the Right Haptic Action +*/ +vr::VRActionHandle_t SteamIVRInput::rightHapticActionHandle() +{ + return m_rightHaptic.handle(); +} + +/*! +Returns the input handle of the Right hand +*/ +vr::VRInputValueHandle_t SteamIVRInput::rightInputHandle() +{ + return m_rightHand.handle(); +} + +/*! +Returns the input handle of the Left hand +*/ +vr::VRInputValueHandle_t SteamIVRInput::leftInputHandle() +{ + return m_leftHand.handle(); +} + /*! Updates the active action set(s). Should be called every frame, or however often you want the input system to diff --git a/src/openvr/ivrinput.h b/src/openvr/ivrinput.h index 994d446..3a90076 100644 --- a/src/openvr/ivrinput.h +++ b/src/openvr/ivrinput.h @@ -4,6 +4,7 @@ #include "ivrinput_action.h" #include "ivrinput_manifest.h" #include "ivrinput_action_set.h" +#include "ivrinput_input_source.h" namespace input { @@ -62,6 +63,13 @@ public: bool pushToTalk(); + bool proxIsActive(); + vr::VRActionHandle_t leftHapticActionHandle(); + vr::VRActionHandle_t rightHapticActionHandle(); + + vr::VRInputValueHandle_t rightInputHandle(); + vr::VRInputValueHandle_t leftInputHandle(); + // Destructor. There are no terminating calls for the IVRInput API, so it // is left blank. ~SteamIVRInput() {} @@ -113,6 +121,14 @@ private: // Push To Talk Action m_pushToTalk; + + // haptic bindings + Action m_leftHaptic; + Action m_rightHaptic; + + // input sources + InputSource m_leftHand; + InputSource m_rightHand; }; /*! @@ -120,7 +136,7 @@ The IVRInput system is _very_ finnicky about strings matching and if they don't match there are usually no errors logged reflecting that. constexpr auto strings should be used to refer to all action manifest strings. */ -namespace input_strings +namespace action_keys { constexpr auto k_actionNextTrack = "/actions/main/in/NextTrack"; constexpr auto k_actionPreviousTrack = "/actions/main/in/PreviousTrack"; @@ -158,8 +174,28 @@ namespace input_strings constexpr auto k_actionPushToTalk = "/actions/main/in/PushToTalk"; - constexpr auto k_setMain = "/actions/main"; + constexpr auto k_actionHapticsLeft = "/actions/main/out/HapticsLeft"; + constexpr auto k_actionHapticsRight = "/actions/main/out/HapticsRight"; -} // namespace input_strings + constexpr auto k_actionProxSensor = "/actions/main/in/ProxSensor"; + +} // namespace action_keys + +/*! +Keys to get input source handles (things like hmd controllers etc.) +*/ +namespace input_keys +{ + constexpr auto k_inputSourceLeft = "/user/hand/left"; + constexpr auto k_inputSourceRight = "/user/hand/right"; +} // namespace input_keys + +/*! +Keys for different action sets +*/ +namespace action_sets +{ + constexpr auto k_setMain = "/actions/main"; +} // namespace action_sets } // namespace input diff --git a/src/openvr/ivrinput_action.h b/src/openvr/ivrinput_action.h index 09ca000..bee87a1 100644 --- a/src/openvr/ivrinput_action.h +++ b/src/openvr/ivrinput_action.h @@ -14,6 +14,7 @@ enum class ActionType Undefined, Digital, Analog, + Haptic, }; /*! diff --git a/src/openvr/ivrinput_input_source.h b/src/openvr/ivrinput_input_source.h new file mode 100644 index 0000000..995453b --- /dev/null +++ b/src/openvr/ivrinput_input_source.h @@ -0,0 +1,45 @@ +#pragma once +#include +#include + +namespace input +{ +/*! +Represents an input source i.e. right controller +*/ +class InputSource +{ +public: + InputSource( const char* const inputSourceName ) : m_name( inputSourceName ) + { + auto error + = vr::VRInput()->GetInputSourceHandle( inputSourceName, &m_handle ); + + if ( error != vr::EVRInputError::VRInputError_None ) + { + LOG( ERROR ) << "Error getting input handle for '" + << inputSourceName + << "'. OpenVR Input Error: " << error; + } + } + /*! + An API internal handle that identifies an input handle. + */ + vr::VRInputValueHandle_t handle() const noexcept + { + return m_handle; + } + /*! + The actions manfiest name of the action. Used for error reporting. + */ + std::string name() const noexcept + { + return m_name; + } + +private: + vr::VRInputValueHandle_t m_handle = 0; + const std::string m_name; +}; + +} // namespace input diff --git a/src/overlaycontroller.cpp b/src/overlaycontroller.cpp index f73d981..fe1d84c 100644 --- a/src/overlaycontroller.cpp +++ b/src/overlaycontroller.cpp @@ -111,6 +111,7 @@ OverlayController::OverlayController( bool desktopMode, nullptr, "OpenVR Advanced Settings Overlay", "Is OpenVR running?" ); throw std::runtime_error( std::string( "No Overlay interface" ) ); } + // Init controllers m_steamVRTabController.initStage1(); m_chaperoneTabController.initStage1(); @@ -123,6 +124,16 @@ OverlayController::OverlayController( bool desktopMode, m_settingsTabController.forceRevivePage() ); m_utilitiesTabController.initStage1(); + // init action handles + + m_chaperoneTabController.setLeftHapticActionHandle( + m_actions.leftHapticActionHandle() ); + m_chaperoneTabController.setRightHapticActionHandle( + m_actions.rightHapticActionHandle() ); + m_chaperoneTabController.setLeftInputHandle( m_actions.leftInputHandle() ); + m_chaperoneTabController.setRightInputHandle( + m_actions.rightInputHandle() ); + // Set qml context qmlEngine.rootContext()->setContextProperty( "applicationVersion", getVersionString() ); diff --git a/src/package_files/action_manifest.json b/src/package_files/action_manifest.json index 1e6c1a0..82ae5cb 100644 --- a/src/package_files/action_manifest.json +++ b/src/package_files/action_manifest.json @@ -3,6 +3,14 @@ { "controller_type": "vive_controller", "binding_url": "default_action_manifests/vive_defaults.json" + }, + { + "controller_type" : "generic", + "binding_url" : "default_action_manifests/generic_hmd_defaults.json" + }, + { + "controller_type" : "vive", + "binding_url" : "default_action_manifests/vive_hmd_defaults.json" } ], "actions": [ @@ -26,6 +34,19 @@ "requirement": "optional", "type": "boolean" }, + { + "name": "/actions/main/in/ProxSensor", + "requirement": "optional", + "type": "boolean" + }, + { + "name": "/actions/main/out/HapticsLeft", + "type": "vibration" + }, + { + "name": "/actions/main/out/HapticsRight", + "type": "vibration" + }, { "name": "/actions/main/in/LeftHandSpaceTurn", "requirement": "optional", @@ -46,7 +67,7 @@ "requirement": "optional", "type": "boolean" }, - { + { "name": "/actions/main/in/OptionalOverrideLeftHandSpaceTurn", "requirement": "optional", "type": "boolean" @@ -138,6 +159,8 @@ "/actions/main/in/PreviousTrack" : "Play Previous Track", "/actions/main/in/PausePlayTrack" : "Pause/Play Track", "/actions/main/in/StopTrack" : "Stop Track", + "/actions/main/out/HapticsLeft" : "Haptics Left", + "/actions/main/out/HapticsRight" : " Haptics Right", "/actions/main/in/LeftHandSpaceTurn" : "Left Hand Space Turn", "/actions/main/in/RightHandSpaceTurn" : "Right Hand Space Turn", "/actions/main/in/LeftHandSpaceDrag" : "Left Hand Space Drag", diff --git a/src/package_files/default_action_manifests/generic_hmd_defaults.json b/src/package_files/default_action_manifests/generic_hmd_defaults.json new file mode 100644 index 0000000..50f4155 --- /dev/null +++ b/src/package_files/default_action_manifests/generic_hmd_defaults.json @@ -0,0 +1,23 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/main/in/ProxSensor" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "generic", + "description" : "Default config for HMD for Prox sensor.", + "name" : "Default configuration for HMD's", + "options" : {}, + "simulated_actions" : [] +} \ No newline at end of file diff --git a/src/package_files/default_action_manifests/vive_hmd_defaults.json b/src/package_files/default_action_manifests/vive_hmd_defaults.json new file mode 100644 index 0000000..9158fb3 --- /dev/null +++ b/src/package_files/default_action_manifests/vive_hmd_defaults.json @@ -0,0 +1,23 @@ +{ + "alias_info" : {}, + "bindings" : { + "/actions/default" : { + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/main/in/ProxSensor" + } + }, + "mode" : "button", + "path" : "/user/head/proximity" + } + ] + } + }, + "controller_type" : "vive", + "description" : "Default config for vive HMD for Prox sensor.", + "name" : "Default configuration for vive HMD's", + "options" : {}, + "simulated_actions" : [] +} \ No newline at end of file diff --git a/src/res/qml/ChaperonePage.qml b/src/res/qml/ChaperonePage.qml index 2a70374..c5cb0ae 100644 --- a/src/res/qml/ChaperonePage.qml +++ b/src/res/qml/ChaperonePage.qml @@ -241,19 +241,19 @@ MyStackViewPage { text: "-" Layout.preferredWidth: 40 onClicked: { - chaperoneVisibilitySlider.value -= 0.1 + chaperoneVisibilitySlider.value -= 0.05 } } MySlider { id: chaperoneVisibilitySlider - from: 0.0 + from: 0.5 to: 1.0 stepSize: 0.01 value: 0.6 Layout.fillWidth: true onPositionChanged: { - var val = this.position * 100 + var val = (this.position * 100)/2 + 50 chaperoneVisibilityText.text = Math.round(val) + "%" } onValueChanged: { @@ -265,14 +265,14 @@ MyStackViewPage { text: "+" Layout.preferredWidth: 40 onClicked: { - chaperoneVisibilitySlider.value += 0.1 + chaperoneVisibilitySlider.value += 0.05 } } MyTextField { id: chaperoneVisibilityText - text: "0.00" + text: "50.00" keyBoardUID: 301 Layout.preferredWidth: 100 Layout.leftMargin: 10 @@ -280,8 +280,8 @@ MyStackViewPage { function onInputEvent(input) { var val = parseFloat(input) if (!isNaN(val)) { - if (val < 0.0) { - val = 0.0 + if (val < 50.0) { + val = 50.0 } else if (val > 100.0) { val = 100.0 } @@ -302,6 +302,7 @@ MyStackViewPage { } MyPushButton2 { + id: chaperoneFadeDistanceMinus text: "-" Layout.preferredWidth: 40 onClicked: { @@ -326,6 +327,7 @@ MyStackViewPage { } MyPushButton2 { + id: chaperoneFadeDistancePlus text: "+" Layout.preferredWidth: 40 onClicked: { @@ -450,17 +452,37 @@ MyStackViewPage { ChaperoneTabController.setForceBounds(this.checked, false) } } + MyToggleButton { + id: chaperoneDisableChaperone + text: "Disable Chaperone" + onCheckedChanged: { + ChaperoneTabController.setDisableChaperone(this.checked, false) + if(this.checked){ + chaperoneFadeDistanceMinus.enabled = false; + chaperoneFadeDistancePlus.enabled = false; + chaperoneFadeDistanceSlider.enabled = false; + chaperoneFadeDistanceText.enabled = false; + + }else{ + chaperoneFadeDistanceMinus.enabled = true; + chaperoneFadeDistancePlus.enabled = true; + chaperoneFadeDistanceSlider.enabled = true; + chaperoneFadeDistanceText.enabled = true; + } + } + } Item { Layout.fillWidth: true } + } - MyPushButton { - id: chaperoneWarningsConfigButton - text: "Proximity Warning Settings" - Layout.preferredWidth: 350 - onClicked: { - MyResources.playFocusChangedSound() - mainView.push(chaperoneWarningsPage) - } + + MyPushButton { + id: chaperoneWarningsConfigButton + text: "Proximity Warning Settings" + Layout.preferredWidth: 350 + onClicked: { + MyResources.playFocusChangedSound() + mainView.push(chaperoneWarningsPage) } } @@ -501,6 +523,10 @@ MyStackViewPage { Component.onCompleted: { chaperoneVisibilitySlider.value = ChaperoneTabController.boundsVisibility + if(chaperoneVisibilitySlider.value < 0.5){ + chaperoneVisibilitySlider.value = 0.5 + } + var d = ChaperoneTabController.fadeDistance.toFixed(1) if (d <= chaperoneFadeDistanceSlider.to) { chaperoneFadeDistanceSlider.value = d @@ -514,6 +540,19 @@ MyStackViewPage { chaperoneCenterMarkerToggle.checked = ChaperoneTabController.centerMarker chaperonePlaySpaceToggle.checked = ChaperoneTabController.playSpaceMarker chaperoneForceBoundsToggle.checked = ChaperoneTabController.forceBounds + chaperoneDisableChaperone.checked = ChaperoneTabController.disableChaperone + if(chaperoneDisableChaperone.checked){ + chaperoneFadeDistanceMinus.enabled = false; + chaperoneFadeDistancePlus.enabled = false; + chaperoneFadeDistanceSlider.enabled = false; + chaperoneFadeDistanceText.enabled = false; + + }else{ + chaperoneFadeDistanceMinus.enabled = true; + chaperoneFadeDistancePlus.enabled = true; + chaperoneFadeDistanceSlider.enabled = true; + chaperoneFadeDistanceText.enabled = true; + } reloadChaperoneProfiles() } diff --git a/src/tabcontrollers/ChaperoneTabController.cpp b/src/tabcontrollers/ChaperoneTabController.cpp index 40e3133..6f2d49a 100644 --- a/src/tabcontrollers/ChaperoneTabController.cpp +++ b/src/tabcontrollers/ChaperoneTabController.cpp @@ -38,8 +38,11 @@ void ChaperoneTabController::initStage1() m_chaperoneVelocityModifier = settings->value( "chaperoneVelocityModifier", 0.3f ).toFloat(); m_chaperoneVelocityModifierCurrent = 1.0f; + m_disableChaperone = settings->value( "disableChaperone", false ).toBool(); + m_fadeDistanceRemembered + = settings->value( "fadeDistanceRemembered", 0.5f ).toFloat(); settings->endGroup(); - + // initHaptics(); reloadChaperoneProfiles(); eventLoopTick( nullptr, 0.0f, 0.0f, 0.0f ); } @@ -365,9 +368,8 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) { float activationDistance = m_chaperoneSwitchToBeginnerDistance * m_chaperoneVelocityModifierCurrent; - if ( distance <= activationDistance - && ( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( vr::k_EButton_ProximitySensor ) ) + + if ( distance <= activationDistance && m_isHMDActive && !m_chaperoneSwitchToBeginnerActive ) { vr::EVRSettingsError vrSettingsError; @@ -406,10 +408,7 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) } } } - else if ( ( distance > activationDistance - || !( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( - vr::k_EButton_ProximitySensor ) ) ) + else if ( ( distance > activationDistance || !m_isHMDActive ) && m_chaperoneSwitchToBeginnerActive ) { vr::EVRSettingsError vrSettingsError; @@ -434,13 +433,13 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) } // Haptic Feedback + if ( m_enableChaperoneHapticFeedback ) { float activationDistance = m_chaperoneHapticFeedbackDistance * m_chaperoneVelocityModifierCurrent; - if ( distance <= activationDistance - && ( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( vr::k_EButton_ProximitySensor ) ) ) + + if ( distance <= activationDistance && m_isHMDActive ) { if ( !m_chaperoneHapticFeedbackActive ) { @@ -451,7 +450,7 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) } m_chaperoneHapticFeedbackActive = true; m_chaperoneHapticFeedbackThread = std::thread( - []( ChaperoneTabController* _this ) { + [&]( ChaperoneTabController* _this ) { auto leftIndex = vr::VRSystem() ->GetTrackedDeviceIndexForControllerRole( @@ -462,17 +461,30 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) vr::TrackedControllerRole_RightHand ); while ( _this->m_chaperoneHapticFeedbackActive ) { + // AS it stands both controllers will vibrate + // regardless of which is closer to boundary + // haptic Frequency is 0-320Hz if ( leftIndex != vr::k_unTrackedDeviceIndexInvalid ) { - vr::VRSystem()->TriggerHapticPulse( - leftIndex, 0, 2000 ); + vr::VRInput()->TriggerHapticVibrationAction( + m_leftActionHandle, + 0.0f, + 0.2f, + 120.0f, + 0.5f, + m_leftInputHandle ); } if ( rightIndex != vr::k_unTrackedDeviceIndexInvalid ) { - vr::VRSystem()->TriggerHapticPulse( - rightIndex, 0, 2000 ); + vr::VRInput()->TriggerHapticVibrationAction( + m_rightActionHandle, + 0.0f, + 0.2f, + 120.0f, + 0.5f, + m_rightInputHandle ); } std::this_thread::sleep_for( std::chrono::milliseconds( 5 ) ); @@ -481,10 +493,7 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) this ); } } - else if ( ( distance > activationDistance - || !( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( - vr::k_EButton_ProximitySensor ) ) ) + else if ( ( distance > activationDistance || !m_isHMDActive ) && m_chaperoneHapticFeedbackActive ) { m_chaperoneHapticFeedbackActive = false; @@ -494,11 +503,11 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) // Alarm Sound if ( m_enableChaperoneAlarmSound ) { + // LOG(WARNING) << "In alarm"; float activationDistance = m_chaperoneAlarmSoundDistance * m_chaperoneVelocityModifierCurrent; - if ( distance <= activationDistance - && ( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( vr::k_EButton_ProximitySensor ) ) ) + + if ( distance <= activationDistance && m_isHMDActive ) { if ( !m_chaperoneAlarmSoundActive ) { @@ -520,10 +529,7 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance ) parent->setAlarm01SoundVolume( 1.0f ); } } - else if ( ( distance > activationDistance - || !( hmdState.ulButtonPressed - & vr::ButtonMaskFromId( - vr::k_EButton_ProximitySensor ) ) ) + else if ( ( distance > activationDistance || !m_isHMDActive ) && m_chaperoneAlarmSoundActive ) { parent->cancelAlarm01Sound(); @@ -569,8 +575,6 @@ void ChaperoneTabController::eventLoopTick( m_chaperoneVelocityModifierCurrent += mod; } } - // LOG(INFO) << "m_chaperoneVelocityModifierCurrent: " << - // m_chaperoneVelocityModifierCurrent; float newFadeDistance = m_fadeDistance * m_chaperoneVelocityModifierCurrent; if ( m_fadeDistanceModified != newFadeDistance ) { @@ -584,10 +588,22 @@ void ChaperoneTabController::eventLoopTick( if ( devicePoses ) { + m_isHMDActive = false; std::lock_guard lock( parent->chaperoneUtils().mutex() ); auto minDistance = NAN; auto& poseHmd = devicePoses[vr::k_unTrackedDeviceIndex_Hmd]; + + // m_isHMDActive is true when prox sensor OR HMD is moving (~10 seconds + // to update from OVR) + // THIS IS A WORK-AROUND Until proper binding support/calls are made + // availble for prox sensor + if ( vr::VRSystem()->GetTrackedDeviceActivityLevel( + vr::k_unTrackedDeviceIndex_Hmd ) + == vr::k_EDeviceActivityLevel_UserInteraction ) + { + m_isHMDActive = true; + } if ( poseHmd.bPoseIsValid && poseHmd.bDeviceIsConnected && poseHmd.eTrackingResult == vr::TrackingResult_Running_OK ) { @@ -647,6 +663,17 @@ void ChaperoneTabController::eventLoopTick( { handleChaperoneWarnings( minDistance ); } + else + { + // attempts to reload chaperone data once per ~5 seconds. + m_updateTicksChaperoneReload++; + if ( m_updateTicksChaperoneReload >= 500 ) + { + m_updateTicksChaperoneReload = 0; + LOG( WARNING ) << "Attempting to Reloading Chaperone Data"; + parent->chaperoneUtils().loadChaperoneData(); + } + } } if ( settingsUpdateCounter >= k_chaperoneSettingsUpdateCounter ) @@ -732,11 +759,19 @@ void ChaperoneTabController::setBoundsVisibility( float value, bool notify ) { if ( m_visibility != value ) { - m_visibility = value; + if ( value <= 0.5f ) + { + m_visibility = 0.5f; + } + else + { + m_visibility = value; + } vr::VRSettings()->SetInt32( vr::k_pch_CollisionBounds_Section, vr::k_pch_CollisionBounds_ColorGammaA_Int32, static_cast( 255 * m_visibility ) ); + vr::VRSettings()->Sync(); if ( notify ) { @@ -902,6 +937,11 @@ bool ChaperoneTabController::isChaperoneAlarmSoundAdjustVolume() const return m_chaperoneAlarmSoundAdjustVolume; } +bool ChaperoneTabController::disableChaperone() const +{ + return m_disableChaperone; +} + float ChaperoneTabController::chaperoneAlarmSoundDistance() const { return m_chaperoneAlarmSoundDistance; @@ -1241,6 +1281,34 @@ void ChaperoneTabController::setChaperoneVelocityModifier( float value, } } +void ChaperoneTabController::setDisableChaperone( bool value, bool notify ) +{ + if ( m_disableChaperone != value ) + { + m_disableChaperone = value; + if ( m_disableChaperone ) + { + m_fadeDistanceRemembered = m_fadeDistance; + setFadeDistance( 0.0f, true ); + } + else + { + setFadeDistance( m_fadeDistanceRemembered, true ); + } + auto settings = OverlayController::appSettings(); + settings->beginGroup( "chaperoneSettings" ); + settings->setValue( "fadeDistanceRemembered", + m_fadeDistanceRemembered ); + settings->setValue( "disableChaperone", m_disableChaperone ); + settings->endGroup(); + settings->sync(); + if ( notify ) + { + emit disableChaperoneChanged( m_disableChaperone ); + } + } +} + void ChaperoneTabController::flipOrientation() { parent->m_moveCenterTabController.reset(); @@ -1630,6 +1698,27 @@ void ChaperoneTabController::reset() settingsUpdateCounter = 999; // Easiest way to get default values } +void ChaperoneTabController::setRightHapticActionHandle( + vr::VRActionHandle_t handle ) +{ + m_rightActionHandle = handle; +} +void ChaperoneTabController::setLeftHapticActionHandle( + vr::VRActionHandle_t handle ) +{ + m_leftActionHandle = handle; +} +void ChaperoneTabController::setRightInputHandle( + vr::VRInputValueHandle_t handle ) +{ + m_rightInputHandle = handle; +} +void ChaperoneTabController::setLeftInputHandle( + vr::VRInputValueHandle_t handle ) +{ + m_leftInputHandle = handle; +} + void ChaperoneTabController::shutdown() { if ( m_enableChaperoneSwitchToBeginner diff --git a/src/tabcontrollers/ChaperoneTabController.h b/src/tabcontrollers/ChaperoneTabController.h index d7e2be2..2a0551d 100644 --- a/src/tabcontrollers/ChaperoneTabController.h +++ b/src/tabcontrollers/ChaperoneTabController.h @@ -78,6 +78,8 @@ class ChaperoneTabController : public QObject setPlaySpaceMarker NOTIFY playSpaceMarkerChanged ) Q_PROPERTY( bool forceBounds READ forceBounds WRITE setForceBounds NOTIFY forceBoundsChanged ) + Q_PROPERTY( bool disableChaperone READ disableChaperone WRITE + setDisableChaperone NOTIFY disableChaperoneChanged ) Q_PROPERTY( bool chaperoneSwitchToBeginnerEnabled READ isChaperoneSwitchToBeginnerEnabled WRITE @@ -142,6 +144,8 @@ private: bool m_centerMarker = false; bool m_playSpaceMarker = false; bool m_forceBounds = false; + bool m_disableChaperone = false; + float m_fadeDistanceRemembered = 0.0f; bool m_enableChaperoneSwitchToBeginner = false; float m_chaperoneSwitchToBeginnerDistance = 0.5f; @@ -169,6 +173,16 @@ private: unsigned settingsUpdateCounter = 0; + bool m_isHapticGood = true; + bool m_isHMDActive = false; + + int m_updateTicksChaperoneReload = 0; + + vr::VRActionHandle_t m_rightActionHandle; + vr::VRActionHandle_t m_leftActionHandle; + vr::VRInputValueHandle_t m_leftInputHandle; + vr::VRInputValueHandle_t m_rightInputHandle; + std::vector chaperoneProfiles; public: @@ -189,6 +203,12 @@ public: bool centerMarker() const; bool playSpaceMarker() const; bool forceBounds() const; + bool disableChaperone() const; + + void setRightHapticActionHandle( vr::VRActionHandle_t handle ); + void setLeftHapticActionHandle( vr::VRActionHandle_t handle ); + void setRightInputHandle( vr::VRInputValueHandle_t handle ); + void setLeftInputHandle( vr::VRInputValueHandle_t handle ); bool isChaperoneSwitchToBeginnerEnabled() const; float chaperoneSwitchToBeginnerDistance() const; @@ -223,6 +243,7 @@ public slots: void setCenterMarker( bool value, bool notify = true ); void setPlaySpaceMarker( bool value, bool notify = true ); void setForceBounds( bool value, bool notify = true ); + void setDisableChaperone( bool value, bool notify = true ); void setChaperoneSwitchToBeginnerEnabled( bool value, bool notify = true ); void setChaperoneSwitchToBeginnerDistance( float value, @@ -270,6 +291,7 @@ signals: void centerMarkerChanged( bool value ); void playSpaceMarkerChanged( bool value ); void forceBoundsChanged( bool value ); + void disableChaperoneChanged( bool value ); void chaperoneSwitchToBeginnerEnabledChanged( bool value ); void chaperoneSwitchToBeginnerDistanceChanged( float value );