From 229b11b3c84ca48b8d0b6821099727410a5c6209 Mon Sep 17 00:00:00 2001 From: Kung-vr Date: Wed, 18 Sep 2019 00:29:00 +0900 Subject: [PATCH] Prevent applictaion of uninitialized chaperone basis --- src/tabcontrollers/MoveCenterTabController.cpp | 16 +++++++++++++++- src/tabcontrollers/MoveCenterTabController.h | 12 ++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index b009ec8..a84c9c4 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -38,7 +38,6 @@ namespace advsettings { void MoveCenterTabController::initStage1() { - setTrackingUniverse( vr::VRCompositor()->GetTrackingSpace() ); auto settings = OverlayController::appSettings(); settings->beginGroup( "playspaceSettings" ); auto value = settings->value( "adjustChaperone", m_adjustChaperone ); @@ -1095,6 +1094,12 @@ void MoveCenterTabController::incomingSeatedReset() void MoveCenterTabController::reset() { + if ( !m_chaperoneBasisAcquired ) + { + LOG( WARNING ) << "WARNING: Attempted reset offsets before chaperone " + "basis is acquired!"; + return; + } vr::VRChaperoneSetup()->HideWorkingSetPreview(); m_heightToggle = false; emit heightToggleChanged( m_heightToggle ); @@ -1132,6 +1137,15 @@ void MoveCenterTabController::zeroOffsets() emit rotationChanged( m_rotation ); updateChaperoneResetData(); m_pendingZeroOffsets = false; + if ( !m_chaperoneBasisAcquired ) + { + m_chaperoneBasisAcquired = true; + if ( !m_initComplete ) + { + setTrackingUniverse( vr::VRCompositor()->GetTrackingSpace() ); + m_initComplete = true; + } + } if ( m_roomSetupModeDetected ) { LOG( INFO ) << "room setup EXIT detected"; diff --git a/src/tabcontrollers/MoveCenterTabController.h b/src/tabcontrollers/MoveCenterTabController.h index 0f7a54d..3ec93d8 100644 --- a/src/tabcontrollers/MoveCenterTabController.h +++ b/src/tabcontrollers/MoveCenterTabController.h @@ -89,6 +89,8 @@ private: OverlayController* parent; int m_trackingUniverse = static_cast( vr::TrackingUniverseStanding ); + bool m_chaperoneBasisAcquired = false; + bool m_initComplete = false; float m_offsetX = 0.0f; float m_offsetY = 0.0f; float m_offsetZ = 0.0f; @@ -172,8 +174,14 @@ private: std::chrono::steady_clock::time_point m_lastDragUpdateTimePoint; vr::HmdQuad_t* m_collisionBoundsForReset; uint32_t m_collisionBoundsCountForReset = 0; - vr::HmdMatrix34_t m_universeCenterForReset; - vr::HmdMatrix34_t m_seatedCenterForReset; + vr::HmdMatrix34_t m_universeCenterForReset + = { { { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f } } }; + vr::HmdMatrix34_t m_seatedCenterForReset + = { { { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f } } }; vr::HmdQuad_t* m_collisionBoundsForOffset; void updateHmdRotationCounter( vr::TrackedDevicePose_t hmdPose,