diff --git a/Readme.md b/Readme.md index a64e3ff..0ec2bdb 100644 --- a/Readme.md +++ b/Readme.md @@ -27,6 +27,7 @@ Adds an overlay to the OpenVR dashboard that allows access to advanced settings + [Other Controllers](#other-controllers) * [SteamVR Input Guide](#steamvr-input-guide) * [Command Line Arguments](#command-line-arguments) + * [INI File Options](#ini-file-options) * [Preview builds](#preview-builds) - [Documentation](#documentation) * [Top Page](#top-page) @@ -41,6 +42,7 @@ Adds an overlay to the OpenVR dashboard that allows access to advanced settings * [- Utilities Page](#--utilities-page) * [- Desktop Overlay Page](#--desktop-overlay-page) * [- Statistics Page](#--statistics-page) + * [- Bindings Page](#--bindings-page) * [- Settings Page](#--settings-page) - [How to Compile](#how-to-compile) * [Building on Windows](#building-on-windows) @@ -217,6 +219,22 @@ The application (`AdvancedSettings.exe`) can be run with the following optional `"--force-remove-manifest"`: Force uninstalls the `.vrmanifest`. This should be done every time the application is uninstalled. On Windows it is automatically done by the uninstaller. The program will exit early when this flag is set. +## INI File Options + +There are some features that can only be enabled by directly specifying them in the .ini file. On windows the .ini file can be found at `Users\username\AppData\Roaming\AdvancedSettings-Team\OpenVRAdvancedSettings.ini`. + +When adding options to the .ini file, they must be added under the correct section to function. + +Currently the following ini-file-only settings exist: + +Under `[playspaceSettings]` adding `showLogMatricesButton=true` will enable a button in the Offsets Tab that when pressed will write a section to the log file containing the current pose matrix data for tracked devices and universe settings. + +Also under `[playspaceSettings]` adding `simpleRecenter=true` will disable a workaround that allows seated recenter to function on non-lighthouse devices. The workaround instantly applies a second seated recenter whenever a seated recenter is executed. Because simpleRecenter=true will break non-lighthouse seated mode, and true/false behavior is indistinguishable on lighthouse devices, usage of simpleRecenter=true is not recommended. + +Under `[utilitiesSettings]` adding `vrcDebug=true` will enable some buttons in the Utilities Tab to toggle debug panels in VRChat. + +Under `[applicationSettings]` adding `enableDebug=true` will show a "Debug State" text box in the Settings Tab. Changing the debug state number may be used for in-dev branch builds. At this time, it doesn't do anything on the master build. + ## Preview builds If you want to try latest and greatest unreleased features, you can download the latest from the CI (Continuous Integration) server for [Windows](https://ci.appveyor.com/project/icewind1991/openvr-advancedsettings/branch/master). The Linux CI does not provide binary artifacts. @@ -379,6 +397,12 @@ Allows users to temporarily move and rotate the center of the playspace. This al - **Timed Out**: Number of times the currently running application timed out. - **Reprojection Ratio**: Ratio of presented frames to reprojected frames. +## - Bindings Page + +Bindings Page + +- **Bindings Guide**: Shows users how to access the SteamVR input bindings configuration for Advanced Settings. Unfortunately we can't provide a button to directly open this, so users must navigate there themselves. The sole purpose of this page is to make the navigation to the actual bindings config more obvious for users who missed the instruction in this readme (This was a very common support issue). The intended reading of this image is: Click on the SteamVR Settings dash button, then click on "Controller Settings", then click on "Show More Applications" then find "Advanced Settings" by scrolling to the bottom, and click on it. + ## - Settings Page Settings Page diff --git a/build_scripts/qt/resources.pri b/build_scripts/qt/resources.pri index a18eb04..9d65f21 100644 --- a/build_scripts/qt/resources.pri +++ b/build_scripts/qt/resources.pri @@ -54,5 +54,6 @@ DISTFILES += \ src/res/qml/desktop_overlay_page/translation_left_right/SteamDesktopTranslationLeftRight.qml \ src/res/qml/desktop_overlay_page/translation_back_forwards/SteamDesktopTranslationBackForwards.qml \ src/res/qml/desktop_overlay_page/translation_up_down/SteamDesktopTranslationUpDown.qml \ + src/res/qml/BindingsPage.qml \ win32:RC_ICONS += src/res/img/icons/advicon256px.ico diff --git a/docs/screenshots/BindingsPage.png b/docs/screenshots/BindingsPage.png new file mode 100644 index 0000000..0ab1c55 Binary files /dev/null and b/docs/screenshots/BindingsPage.png differ diff --git a/docs/screenshots/RootPage.png b/docs/screenshots/RootPage.png index 1b26dc6..cd6b550 100644 Binary files a/docs/screenshots/RootPage.png and b/docs/screenshots/RootPage.png differ diff --git a/src/res/img/bindings/bindings.png b/src/res/img/bindings/bindings.png new file mode 100644 index 0000000..762f6dd Binary files /dev/null and b/src/res/img/bindings/bindings.png differ diff --git a/src/res/qml/BindingsPage.qml b/src/res/qml/BindingsPage.qml new file mode 100644 index 0000000..ae1574e --- /dev/null +++ b/src/res/qml/BindingsPage.qml @@ -0,0 +1,19 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import ovras.advsettings 1.0 +import "common" + +MyStackViewPage { + headerText: "Bindings Guide" + + content: ColumnLayout { + Image { + source: "qrc:/bindings/bindings" + sourceSize.width: 1120 + sourceSize.height: 659 + Layout.fillHeight: true + Layout.fillWidth: true + } + } +} diff --git a/src/res/qml/RootPage.qml b/src/res/qml/RootPage.qml index 9e06975..9b1f6e8 100644 --- a/src/res/qml/RootPage.qml +++ b/src/res/qml/RootPage.qml @@ -141,6 +141,17 @@ MyStackViewPage { Layout.fillWidth: true } + MyPushButton { + id: bindingsButton + activationSoundEnabled: false + text: "Bindings" + Layout.fillWidth: true + onClicked: { + MyResources.playFocusChangedSound() + mainView.push(bindingsPage) + } + } + MyPushButton { id: settingsButton activationSoundEnabled: false diff --git a/src/res/qml/common/mainwidget.qml b/src/res/qml/common/mainwidget.qml index d044935..b48cbfc 100644 --- a/src/res/qml/common/mainwidget.qml +++ b/src/res/qml/common/mainwidget.qml @@ -80,6 +80,11 @@ Rectangle { visible: false } + property BindingsPage bindingsPage: BindingsPage { + stackView: mainView + visible: false + } + StackView { id: mainView anchors.fill: parent diff --git a/src/res/resources.qrc b/src/res/resources.qrc index 6fb7946..22cbb86 100644 --- a/src/res/resources.qrc +++ b/src/res/resources.qrc @@ -17,4 +17,7 @@ img/audio/media_keys/outline_skip_previous_white_24dp.svg img/audio/media_keys/outline_stop_white_24dp.svg + + img/bindings/bindings.png + \ No newline at end of file diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index bb7d200..017d3f3 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -1323,6 +1323,11 @@ void MoveCenterTabController::reset() m_offsetY = 0.0f; m_offsetZ = 0.0f; m_rotation = 0; + m_lastControllerPosition[0] = 0.0f; + m_lastControllerPosition[1] = 0.0f; + m_lastControllerPosition[2] = 0.0f; + m_lastMoveHand = vr::TrackedControllerRole_Invalid; + m_lastRotateHand = vr::TrackedControllerRole_Invalid; applyChaperoneResetData(); emit offsetXChanged( m_offsetX ); emit offsetYChanged( m_offsetY ); @@ -2546,6 +2551,14 @@ void MoveCenterTabController::updateHandDrag( // offset is un-rotated coordinates + // prevent positional glitches from exceeding max openvr offset clamps. + // We do this by detecting a drag larger than 100m in a single frame. + if ( abs( diff[0] ) > 100.0 || abs( diff[1] ) > 100.0 + || abs( diff[2] ) > 100.0 ) + { + reset(); + } + // prevents updating if axis movement is locked if ( !m_lockXToggle ) { @@ -2863,7 +2876,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } if ( abs( offsetUniverseCenterXyz[1] ) > k_maxOpenvrWorkingSetOffest @@ -2879,7 +2893,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } if ( abs( offsetUniverseCenterXyz[2] ) > k_maxOpenvrWorkingSetOffest @@ -2895,7 +2910,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } @@ -3009,7 +3025,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } if ( abs( offsetUniverseCenterXyz[1] ) > k_maxOpenvrCommitOffset ) @@ -3023,7 +3040,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } if ( abs( offsetUniverseCenterXyz[2] ) > k_maxOpenvrCommitOffset ) @@ -3037,7 +3055,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate ) LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose"; outputLogHmdMatrix( standingZero ); reset(); - LOG( INFO ) << "-Resetting offsets-"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + LOG( INFO ) << "-Resetting to autosaved chaperone profile-"; return; } vr::VRChaperoneSetup()->CommitWorkingCopy(