From 9fd379c7f97d819fbee17461e31f1c64e8fdfbc0 Mon Sep 17 00:00:00 2001 From: Kung-vr Date: Sun, 20 Oct 2019 19:32:05 +0900 Subject: [PATCH] Add debug states for testing seated recenter Settings: enable seated motion -> unchecked + debug state 1~6 adds a slight delay then performs ReloadFromDisk (to test if ReloadFromDisk alone is causing the snap back) Settings: enable seated motion-> checked + debug state 100+ adds a delay before ReloadFromDisk equal to debug state-100 ms. Then proceeds as normal --- .../MoveCenterTabController.cpp | 67 ++++++++++++++++++- src/tabcontrollers/MoveCenterTabController.h | 2 + 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index b4066a8..842d13a 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -1255,6 +1255,35 @@ void MoveCenterTabController::incomingSeatedReset() { updateSeatedResetData(); } + else if ( parent->enableDebug() && parent->debugState() == 1 ) + { + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } + else if ( parent->enableDebug() && parent->debugState() == 2 ) + { + Sleep( 20 ); + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } + else if ( parent->enableDebug() && parent->debugState() == 3 ) + { + Sleep( 100 ); + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } + else if ( parent->enableDebug() && parent->debugState() == 4 ) + { + Sleep( 200 ); + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } + else if ( parent->enableDebug() && parent->debugState() == 5 ) + { + Sleep( 500 ); + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } + else if ( parent->enableDebug() && parent->debugState() == 6 ) + { + Sleep( 1000 ); + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } } void MoveCenterTabController::reset() @@ -1478,7 +1507,15 @@ void MoveCenterTabController::updateSeatedResetData() emit offsetYChanged( m_offsetY ); emit offsetZChanged( m_offsetZ ); emit rotationChanged( m_rotation ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + if ( parent->enableDebug() && parent->debugState() >= 100 ) + { + m_lastSeatedRecenterTimePoint = std::chrono::steady_clock::now(); + m_pendingSeatedReloadFromDisk = true; + } + else + { + vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); + } // set pending update here, will be processed on next instance of motion or // running the reset() function. m_pendingSeatedRecenter = true; @@ -3100,6 +3137,34 @@ 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 af6a4ef..3864364 100644 --- a/src/tabcontrollers/MoveCenterTabController.h +++ b/src/tabcontrollers/MoveCenterTabController.h @@ -175,6 +175,7 @@ private: bool m_chaperoneCommitted = true; bool m_pendingZeroOffsets = true; bool m_pendingSeatedRecenter = false; + bool m_pendingSeatedReloadFromDisk = false; bool m_dashWasOpenPreviousFrame = false; bool m_roomSetupModeDetected = false; bool m_seatedModeDetected = false; @@ -190,6 +191,7 @@ 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