diff --git a/src/res/qml/SettingsPage.qml b/src/res/qml/SettingsPage.qml index aadd826..138e5ae 100644 --- a/src/res/qml/SettingsPage.qml +++ b/src/res/qml/SettingsPage.qml @@ -167,6 +167,8 @@ MyStackViewPage { RowLayout { Layout.fillWidth: true + // set visible to true here in builds when we need a debug toggle checkbox, otherwise false when on master branch. + visible: false Item { Layout.fillWidth: true diff --git a/src/tabcontrollers/ChaperoneTabController.cpp b/src/tabcontrollers/ChaperoneTabController.cpp index 5192ef9..e708fcf 100644 --- a/src/tabcontrollers/ChaperoneTabController.cpp +++ b/src/tabcontrollers/ChaperoneTabController.cpp @@ -632,7 +632,7 @@ void ChaperoneTabController::eventLoopTick( if ( m_updateTicksChaperoneReload >= 500 ) { m_updateTicksChaperoneReload = 0; - LOG( WARNING ) << "Attempting to Reloading Chaperone Data"; + LOG( WARNING ) << "Attempting to reload chaperone data"; parent->chaperoneUtils().loadChaperoneData(); } } diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index eeff2e7..bb7d200 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -158,6 +158,11 @@ void MoveCenterTabController::initStage1() { m_enableSeatedMotion = value.toBool(); } + value = settings->value( "simpleRecenter", m_simpleRecenter ); + if ( value.isValid() && !value.isNull() ) + { + m_simpleRecenter = value.toBool(); + } settings->endGroup(); reloadOffsetProfiles(); m_lastDragUpdateTimePoint = std::chrono::steady_clock::now(); @@ -351,6 +356,10 @@ void MoveCenterTabController::outputLogSettings() { LOG( INFO ) << "LOADED SETTINGS: Seated Motion Enabled"; } + if ( m_simpleRecenter ) + { + LOG( INFO ) << "LOADED SETTINGS: Simple Recenter Enabled"; + } if ( m_dragBounds ) { LOG( INFO ) << "LOADED SETTINGS: Space Drag Force Bounds Enabled"; @@ -1207,6 +1216,27 @@ void MoveCenterTabController::setEnableSeatedMotion( bool value, bool notify ) << m_enableSeatedMotion; } +bool MoveCenterTabController::simpleRecenter() const +{ + return m_simpleRecenter; +} + +void MoveCenterTabController::setSimpleRecenter( bool value, bool notify ) +{ + m_simpleRecenter = value; + auto settings = OverlayController::appSettings(); + settings->beginGroup( "playspaceSettings" ); + settings->setValue( "simpleRecenter", m_simpleRecenter ); + settings->endGroup(); + settings->sync(); + if ( notify ) + { + emit simpleRecenterChanged( m_simpleRecenter ); + } + LOG( INFO ) << "CHANGED SETTINGS: Simple Recenter Set: " + << m_simpleRecenter; +} + void MoveCenterTabController::modOffsetX( float value, bool notify ) { if ( !m_lockXToggle ) @@ -1253,7 +1283,10 @@ void MoveCenterTabController::incomingSeatedReset() { if ( m_enableSeatedMotion ) { - if ( !m_selfRequestedSeatedRecenter ) + // if we didn't send the request from OVRAS, we need to send another + // ResetSeatedZeroPose(). It seems that only after this is sent from + // OVRAS does ReloadFromDisk return valid info on WMR. + if ( !m_selfRequestedSeatedRecenter && !m_simpleRecenter ) { m_selfRequestedSeatedRecenter = true; vr::VRSystem()->ResetSeatedZeroPose(); @@ -1263,35 +1296,6 @@ void MoveCenterTabController::incomingSeatedReset() updateSeatedResetData(); } } - else if ( parent->enableDebug() && parent->debugState() == 1 ) - { - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } - else if ( parent->enableDebug() && parent->debugState() == 2 ) - { - std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } - else if ( parent->enableDebug() && parent->debugState() == 3 ) - { - std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } - else if ( parent->enableDebug() && parent->debugState() == 4 ) - { - std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } - else if ( parent->enableDebug() && parent->debugState() == 5 ) - { - std::this_thread::sleep_for( std::chrono::milliseconds( 500 ) ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } - else if ( parent->enableDebug() && parent->debugState() == 6 ) - { - std::this_thread::sleep_for( std::chrono::milliseconds( 1000 ) ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } } void MoveCenterTabController::reset() @@ -1474,10 +1478,6 @@ void MoveCenterTabController::zeroOffsets() void MoveCenterTabController::sendSeatedRecenter() { - if ( parent->enableDebug() && parent->debugState() == 7 ) - { - m_selfRequestedSeatedRecenter = true; - } vr::VRSystem()->ResetSeatedZeroPose(); } @@ -1519,15 +1519,7 @@ void MoveCenterTabController::updateSeatedResetData() emit offsetYChanged( m_offsetY ); emit offsetZChanged( m_offsetZ ); emit rotationChanged( m_rotation ); - if ( parent->enableDebug() && parent->debugState() >= 100 ) - { - m_lastSeatedRecenterTimePoint = std::chrono::steady_clock::now(); - m_pendingSeatedReloadFromDisk = true; - } - else - { - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - } + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); // done with this recenter, so set self request back to false for next time. m_selfRequestedSeatedRecenter = false; // set pending update here, will be processed on next instance of motion or @@ -3151,34 +3143,6 @@ void MoveCenterTabController::eventLoopTick( return; } - if ( parent->enableDebug() && parent->debugState() >= 100 ) - { - if ( m_pendingSeatedReloadFromDisk ) - { - double secondsSinceLastRecenter - = std::chrono::duration( - std::chrono::steady_clock::now() - - m_lastSeatedRecenterTimePoint ) - .count(); - - if ( secondsSinceLastRecenter - >= ( static_cast( parent->debugState() ) - 100.0 ) - / 1000.0 ) - { - vr::VRChaperoneSetup()->ReloadFromDisk( - vr::EChaperoneConfigFile_Live ); - m_pendingSeatedReloadFromDisk = false; - } - // stop for one loop tick even if it's time to - // ReloadFromDisk to give it a little extra time before we - // might process motion. - - // if still m_pendingSeatedReloadFromDisk we'll remain waiting - // here until it's time, stopping before processing motion. - return; - } - } - // only update dynamic motion if the dash is closed if ( !parent->isDashboardVisible() ) { diff --git a/src/tabcontrollers/MoveCenterTabController.h b/src/tabcontrollers/MoveCenterTabController.h index 9f90ecf..9d3d000 100644 --- a/src/tabcontrollers/MoveCenterTabController.h +++ b/src/tabcontrollers/MoveCenterTabController.h @@ -100,6 +100,8 @@ class MoveCenterTabController : public QObject setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged ) Q_PROPERTY( bool enableSeatedMotion READ enableSeatedMotion WRITE setEnableSeatedMotion NOTIFY enableSeatedMotionChanged ) + Q_PROPERTY( bool simpleRecenter READ simpleRecenter WRITE setSimpleRecenter + NOTIFY simpleRecenterChanged ) private: OverlayController* parent; @@ -136,7 +138,6 @@ private: float m_gravityFloor = 0.0f; float m_gravityStrength = 9.8f; float m_flingStrength = 1.0f; - float m_seatedHeight = 1.0f; bool m_momentumSave = false; bool m_lockXToggle = false; bool m_lockYToggle = false; @@ -175,7 +176,6 @@ private: bool m_chaperoneCommitted = true; bool m_pendingZeroOffsets = true; bool m_pendingSeatedRecenter = false; - bool m_pendingSeatedReloadFromDisk = false; bool m_selfRequestedSeatedRecenter = false; bool m_dashWasOpenPreviousFrame = false; bool m_roomSetupModeDetected = false; @@ -185,6 +185,7 @@ private: bool m_oldStyleMotion = false; bool m_universeCenteredRotation = false; bool m_enableSeatedMotion = false; + bool m_simpleRecenter = false; unsigned settingsUpdateCounter = 0; int m_hmdRotationStatsUpdateCounter = 0; unsigned m_dragComfortFrameSkipCounter = 0; @@ -192,7 +193,6 @@ private: double m_velocity[3] = { 0.0, 0.0, 0.0 }; std::chrono::steady_clock::time_point m_lastGravityUpdateTimePoint; std::chrono::steady_clock::time_point m_lastDragUpdateTimePoint; - std::chrono::steady_clock::time_point m_lastSeatedRecenterTimePoint; vr::HmdQuad_t* m_collisionBoundsForReset; uint32_t m_collisionBoundsCountForReset = 0; vr::HmdMatrix34_t m_universeCenterForReset @@ -258,6 +258,7 @@ public: bool oldStyleMotion() const; bool universeCenteredRotation() const; bool enableSeatedMotion() const; + bool simpleRecenter() const; bool isInitComplete() const; double getHmdYawTotal(); void resetHmdYawTotal(); @@ -334,6 +335,7 @@ public slots: void setOldStyleMotion( bool value, bool notify = true ); void setUniverseCenteredRotation( bool value, bool notify = true ); void setEnableSeatedMotion( bool value, bool notify = true ); + void setSimpleRecenter( bool value, bool notify = true ); void shutdown(); void reset(); @@ -378,6 +380,7 @@ signals: void oldStyleMotionChanged( bool value ); void universeCenteredRotationChanged( bool value ); void enableSeatedMotionChanged( bool value ); + void simpleRecenterChanged( bool value ); void offsetProfilesUpdated(); };