diff --git a/build_scripts/compile_version_string.txt b/build_scripts/compile_version_string.txt index 5c07811..55505cf 100644 --- a/build_scripts/compile_version_string.txt +++ b/build_scripts/compile_version_string.txt @@ -1 +1 @@ -5.8.6-release +5.8.9-release diff --git a/src/overlaycontroller.cpp b/src/overlaycontroller.cpp index 0e51c8f..3684e6f 100644 --- a/src/overlaycontroller.cpp +++ b/src/overlaycontroller.cpp @@ -526,22 +526,15 @@ void OverlayController::SetWidget( QQuickItem* quickItem, autoApplyChaperoneName() ); if ( chapindex.first ) { + LOG( INFO ) << "Auto Applying Chaperone"; m_chaperoneTabController.applyChaperoneProfile( chapindex.second ); - bool success = vr::VRApplications()->CancelApplicationLaunch( - "openvr.tool.steamvr_room_setup" ); - auto successsstr = success ? "true" : "false"; - - LOG( INFO ) << "Attempted to stop roomsetup: " << successsstr; - if ( vr::VRApplications()->GetApplicationProcessId( - "openvr.tool.steamvr_room_setup" ) - != 0 ) - { - LOG( INFO ) << "room setup running after applying chaperone " - "exiting roomsetup"; - vr::VRApplications()->LaunchApplication( - "openvr.tool.steamvr_environments" ); - } + // This should be the way to stop room-setup from starting... as it + // sends steamvr a signal that it is completed + vr::VRChaperoneSetup()->CommitWorkingCopy( + vr::EChaperoneConfigFile_Live ); + return; } + LOG( WARNING ) << "Profile Not Found for Auto Apply Chaperone!"; } } @@ -1248,41 +1241,28 @@ void OverlayController::mainEventLoop() break; case vr::VREvent_SeatedZeroPoseReset: - { - m_incomingReset = true; - } - break; case vr::VREvent_StandingZeroPoseReset: { m_incomingReset = true; } break; - // Multiple ChaperoneUniverseHasChanged are often emitted at the - // same time (some with a little bit of delay) There is no sure way - // to recognize redundant events, we can only exclude redundant - // events during the same call of OnTimeoutPumpEvents() INFO Removed - // logging on play space mover for possible crashing issues. + // Multiple ChaperoneUniverseHasChanged are often + // emitted at the same time (some with a little bit of + // delay) There is no sure way to recognize redundant + // events, we can only exclude redundant events during + // the same call of OnTimeoutPumpEvents() INFO Removed + // logging on play space mover for possible crashing + // issues. case vr::VREvent_ChaperoneUniverseHasChanged: { uint64_t previousUniverseId = vrEvent.data.chaperone.m_nPreviousUniverse; uint64_t currentUniverseId = vrEvent.data.chaperone.m_nCurrentUniverse; - LOG( INFO ) << "(VREvent) ChaperoneUniverseHasChanged... Previous:" - << previousUniverseId - << " Current:" << currentUniverseId; - - if ( !chaperoneDataAlreadyUpdated ) - { - m_chaperoneUtils.loadChaperoneData(); - chaperoneDataAlreadyUpdated = true; - } - } - break; - - case vr::VREvent_ChaperoneDataHasChanged: - { + LOG( INFO ) + << "(VREvent) ChaperoneUniverseHasChanged... Previous : " + << previousUniverseId << " Current:" << currentUniverseId; if ( !chaperoneDataAlreadyUpdated ) { m_chaperoneUtils.loadChaperoneData(); @@ -1303,6 +1283,12 @@ void OverlayController::mainEventLoop() break; } } + if ( m_incomingReset ) + { + m_incomingReset = false; + LOG( INFO ) << "Reset zero event recorded"; + m_moveCenterTabController.incomingZeroReset(); + } if ( m_incomingReset ) { diff --git a/src/overlaycontroller.h b/src/overlaycontroller.h index 0a8ded5..b538866 100644 --- a/src/overlaycontroller.h +++ b/src/overlaycontroller.h @@ -167,6 +167,7 @@ public: // I know it's an ugly hack to make them public to enable external UtilitiesTabController m_utilitiesTabController; VideoTabController m_videoTabController; RotationTabController m_rotationTabController; + bool m_incomingReset = false; private: QPoint getMousePositionForEvent( vr::VREvent_Mouse_t mouse ); diff --git a/src/res/qml/PlayspacePage.qml b/src/res/qml/PlayspacePage.qml index a2637c4..fae19d5 100644 --- a/src/res/qml/PlayspacePage.qml +++ b/src/res/qml/PlayspacePage.qml @@ -488,7 +488,7 @@ MyStackViewPage { id: spaceSeatedRecenter Layout.preferredWidth: 250 visible: true - text: "Seated Recenter" + text: "Re-center" onClicked: { MoveCenterTabController.sendSeatedRecenter() } diff --git a/src/res/qml/video_page/brightness/BrightnessGroupBox.qml b/src/res/qml/video_page/brightness/BrightnessGroupBox.qml index c47697f..cd3ab29 100644 --- a/src/res/qml/video_page/brightness/BrightnessGroupBox.qml +++ b/src/res/qml/video_page/brightness/BrightnessGroupBox.qml @@ -57,9 +57,7 @@ GroupBox { value: 1.0 Layout.fillWidth: true onMoved: { - var val = (this.value * 100) - brightnessValueText.text = Math.round(val) + "%" - VideoTabController.setBrightnessOpacityValue(value.toFixed(2), true) + VideoTabController.setBrightnessOpacityValue(this.value.toFixed(2), true) } } @@ -73,17 +71,13 @@ GroupBox { function onInputEvent(input) { var val = parseFloat(input) if (!isNaN(val)) { - if (val < 5.0) { - val = 5.0 + if (val < 3) { + val = 3 } else if (val > 100.0) { val = 100.0 } var v = (val/100) VideoTabController.setBrightnessOpacityValue(v.toFixed(2), true) - if(v<.05){ - v = .05 - } - brightnessSlider.value = v } text = Math.round(VideoTabController.brightnessOpacityValue * 100) + "%" } diff --git a/src/res/qml/video_page/overlaycolorbright/OverlayMethodGroupBox.qml b/src/res/qml/video_page/overlaycolorbright/OverlayMethodGroupBox.qml index 4d99911..690b4c5 100644 --- a/src/res/qml/video_page/overlaycolorbright/OverlayMethodGroupBox.qml +++ b/src/res/qml/video_page/overlaycolorbright/OverlayMethodGroupBox.qml @@ -57,13 +57,8 @@ GroupBox { stepSize: 0.01 value: 1.0 Layout.fillWidth: true - onPositionChanged: { - var val = (this.value * 100) - brightnessValueText.text = Math.round(val) + "%" - } - onValueChanged: { - - VideoTabController.setBrightnessOpacityValue(value.toFixed(2), true) + onMoved: { + VideoTabController.setBrightnessOpacityValue(this.value.toFixed(2), true) } } @@ -77,13 +72,13 @@ GroupBox { function onInputEvent(input) { var val2 = parseFloat(input) if (!isNaN(val2)) { - if (val2 < 5) { - val2 = 5 + if (val2 < 3) { + val2 = 3 } else if (val2 > 100.0) { val2 = 100.0 } - var v2 = (val2/100).toFixed(2) - brightnessSlider.value = v + var v2 = (val2/100) + VideoTabController.setBrightnessOpacityValue(v2.toFixed(2), true) } text = Math.round(VideoTabController.brightnessOpacityValue * 100) + "%" } @@ -304,7 +299,9 @@ GroupBox { target: VideoTabController onBrightnessOpacityValueChanged: { - brightnessSlider.value = VideoTabController.brightnessOpacityValue + var brightvalue = VideoTabController.brightnessOpacityValue + brightnessSlider.value = brightvalue + brightnessValueText.text = Math.round(brightvalue*100)+ "%" } onBrightnessEnabledChanged: { brightnessToggle.checked = VideoTabController.brightnessEnabled diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index c7cabbc..3263ab0 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -885,25 +885,57 @@ void MoveCenterTabController::shutdown() vr::VRChaperoneSetup()->RevertWorkingCopy(); } -void MoveCenterTabController::incomingSeatedReset() +void MoveCenterTabController::incomingZeroReset() { - // This really covers standing reset as well - updateChaperoneResetData(); - if ( m_offsetY != 0 ) + // Calibration state is ultimately no longer a safety issue per discussions + // with valve (the warnings/error's dont' mean anything for out context) + // However It does appear to effect the recenter method (potentially other + // aspects) IN mixed tracking environments I get this issue, the check if + // there is an error and apply autosaved profile is hopefully a workaround + auto calState = vr::VRChaperone()->GetCalibrationState(); + LOG( INFO ) << "Calibration State on Zero Reset is: " << calState; + + // If we detect a seated Recenter and are not currently in process + // we reload chaperone from disk + if ( m_recenterStages < 1 ) { - m_offsetY = -m_offsetY; - updateSpace(); - updateChaperoneResetData(); + LOG( INFO ) << "Re-Center Stage 1, reload from disk"; + m_recenterStages++; + + if ( calState > 199 && m_initComplete ) + { + LOG( INFO ) << "Chaperone calibration state is error, attempting " + "to apply autosaved profile to fix issue"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + } + + // Revert Working copy to "apply" the changes + vr::VRChaperoneSetup()->RevertWorkingCopy(); + // Send a Re-center again so the changes stick on our end. + sendSeatedRecenter(); + return; + } + // We finalize the Recenter, by zero-ing offsets and setting new zero pos, + // and reseting our stage counter + if ( m_recenterStages == 1 ) + { + LOG( INFO ) << "Recenter Stage 2 re-set zero pos, and reset offsets"; + vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose( + &m_universeCenterForReset ); + vr::VRChaperoneSetup()->GetWorkingSeatedZeroPoseToRawTrackingPose( + &m_seatedCenterForReset ); + resetOffsets( true ); + m_recenterStages = 0; + return; } - zeroOffsets(); } void MoveCenterTabController::reset() { - // This is a weird hack for handling the reset properly don't ask me why - // reset plays better w/ a non 0 starting point - m_offsetY = 0.01f; - updateSpace(); + // DO NOT attempt to apply autosaved profile on reset, as it is triggered by + // the apply chaperone profile Side effects are bad! + auto calState = vr::VRChaperone()->GetCalibrationState(); + LOG( INFO ) << "Calibration State on Reset is: " << calState; if ( !m_chaperoneBasisAcquired ) { @@ -1069,6 +1101,9 @@ void MoveCenterTabController::zeroOffsets() // all init complete, safe to autosave chaperone profile parent->m_chaperoneTabController.createNewAutosaveProfile(); m_initComplete = true; + auto calState = vr::VRChaperone()->GetCalibrationState(); + LOG( INFO ) << "Calibration State after autosave profile is: " + << calState; } else { @@ -1129,32 +1164,15 @@ void MoveCenterTabController::clampVelocity( double* velocity ) } } -void MoveCenterTabController::updateSeatedResetData() -{ - m_heightToggle = false; - emit heightToggleChanged( m_heightToggle ); - - m_oldOffsetX = m_oldOffsetY = m_oldOffsetZ = 0.0f; - m_oldRotation = m_rotation = 0; - m_offsetX = m_offsetY = m_offsetZ = 0.0f; - - emit offsetXChanged( m_offsetX ); - emit offsetYChanged( m_offsetY ); - emit offsetZChanged( m_offsetZ ); - emit rotationChanged( m_rotation ); - vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live ); - // done with this recenter, so set self request back to false for next - // time. -} - void MoveCenterTabController::updateChaperoneResetData() { - vr::VRChaperoneSetup()->RevertWorkingCopy(); + // TODO + // vr::VRChaperoneSetup()->RevertWorkingCopy(); unsigned currentQuadCount = 0; vr::VRChaperoneSetup()->GetWorkingCollisionBoundsInfo( nullptr, ¤tQuadCount ); m_collisionBoundsForReset = new vr::HmdQuad_t[currentQuadCount]; - m_collisionBoundsForOffset = new vr::HmdQuad_t[currentQuadCount]; + // m_collisionBoundsForOffset = new vr::HmdQuad_t[currentQuadCount]; m_collisionBoundsCountForReset = currentQuadCount; vr::VRChaperoneSetup()->GetWorkingCollisionBoundsInfo( m_collisionBoundsForReset, ¤tQuadCount ); @@ -1164,7 +1182,7 @@ void MoveCenterTabController::updateChaperoneResetData() vr::VRChaperoneSetup()->GetWorkingSeatedZeroPoseToRawTrackingPose( &m_seatedCenterForReset ); - updateCollisionBoundsForOffset(); + // updateCollisionBoundsForOffset(); parent->m_chaperoneTabController.updateHeight( getBoundsBasisMaxY() ); // unsigned checkQuadCount = 0; @@ -1177,44 +1195,8 @@ void MoveCenterTabController::updateChaperoneResetData() } } -void MoveCenterTabController::updateCollisionBoundsForOffset() -{ - if ( m_collisionBoundsCountForReset > 0 ) - { - float universeCenterForResetYaw - = std::atan2( m_universeCenterForReset.m[0][2], - m_universeCenterForReset.m[2][2] ); - - // we want to store m_collisionBoundsForOffset as spacially relative - // to m_universeCenterForReset, so: - - // for every quad in the chaperone bounds... - for ( unsigned quad = 0; quad < m_collisionBoundsCountForReset; quad++ ) - { - // at every corner in that quad... - for ( unsigned corner = 0; corner < 4; corner++ ) - { - // copy from m_collisionBoundsForReset - m_collisionBoundsForOffset[quad].vCorners[corner].v[0] - = m_collisionBoundsForReset[quad].vCorners[corner].v[0]; - m_collisionBoundsForOffset[quad].vCorners[corner].v[1] - = m_collisionBoundsForReset[quad].vCorners[corner].v[1]; - m_collisionBoundsForOffset[quad].vCorners[corner].v[2] - = m_collisionBoundsForReset[quad].vCorners[corner].v[2]; - - // unrotate by universe center's yaw - rotateFloatCoordinates( - m_collisionBoundsForOffset[quad].vCorners[corner].v, - -universeCenterForResetYaw ); - } - } - } -} - void MoveCenterTabController::applyChaperoneResetData() { - updateSpace( true ); - vr::VRChaperoneSetup()->RevertWorkingCopy(); if ( m_collisionBoundsCountForReset > 0 ) { vr::VRChaperoneSetup()->SetWorkingCollisionBoundsInfo( @@ -1250,7 +1232,7 @@ void MoveCenterTabController::setBoundsBasisHeight( float newHeight ) m_collisionBoundsForReset[b].vCorners[3].v[1] = 0.0; } - updateCollisionBoundsForOffset(); + // updateCollisionBoundsForOffset(); updateSpace( true ); } } @@ -1872,9 +1854,30 @@ void MoveCenterTabController::heightToggleAction( bool heightToggleJustPressed ) void MoveCenterTabController::resetOffsets( bool resetOffsetsJustPressed ) { + // The fn is ran if bool is true, this function is called every pass because + // of keyboard input. if ( resetOffsetsJustPressed ) { - reset(); + auto calState = vr::VRChaperone()->GetCalibrationState(); + LOG( INFO ) << "Calibration State on Reset Offsets is: " << calState; + + if ( calState > 199 && m_initComplete ) + { + LOG( INFO ) << "Chaperone calibration state is error, attempting " + "to apply autosaved profile to fix issue"; + parent->m_chaperoneTabController.applyAutosavedProfile(); + } + + m_offsetX = 0.0f; + m_offsetY = 0.0f; + m_offsetZ = 0.0f; + m_rotation = 0; + emit offsetXChanged( m_offsetX ); + emit offsetYChanged( m_offsetY ); + emit offsetZChanged( m_offsetZ ); + emit rotationChanged( m_rotation ); + updateSpace( true ); + // reset(); } } diff --git a/src/tabcontrollers/MoveCenterTabController.h b/src/tabcontrollers/MoveCenterTabController.h index fcbaee7..d468ef6 100644 --- a/src/tabcontrollers/MoveCenterTabController.h +++ b/src/tabcontrollers/MoveCenterTabController.h @@ -126,9 +126,6 @@ class MoveCenterTabController : public QObject Q_PROPERTY( bool showLogMatricesButton READ showLogMatricesButton WRITE setShowLogMatricesButton NOTIFY showLogMatricesButtonChanged ) - // Q_PROPERTY( bool allowExternalEdits READ allowExternalEdits WRITE - // setAllowExternalEdits NOTIFY allowExternalEditsChanged - // ) Q_PROPERTY( bool universeCenteredRotation READ universeCenteredRotation WRITE setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged ) @@ -198,6 +195,7 @@ private: int m_hmdRotationStatsUpdateCounter = 0; unsigned m_dragComfortFrameSkipCounter = 0; unsigned m_turnComfortFrameSkipCounter = 0; + int m_recenterStages = 0; // Matrix used For Center Marker vr::HmdMatrix34_t m_offsetmatrix = utils::k_forwardUpMatrix; @@ -215,8 +213,8 @@ private: = { { { 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 updateCollisionBoundsForOffset(); + // vr::HmdQuad_t* m_collisionBoundsForOffset; + // void updateCollisionBoundsForOffset(); void updateHmdRotationCounter( vr::TrackedDevicePose_t hmdPose, double angle ); @@ -270,7 +268,7 @@ public: bool isInitComplete() const; double getHmdYawTotal(); void resetHmdYawTotal(); - void incomingSeatedReset(); + void incomingZeroReset(); void setBoundsBasisHeight( float newHeight ); float getBoundsBasisMaxY(); @@ -280,7 +278,6 @@ public: void saveOffsetProfiles(); Q_INVOKABLE unsigned getOffsetProfileCount(); Q_INVOKABLE QString getOffsetProfileName( unsigned index ); - // Q_INVOKABLE void setIgnoreChaperoneState(); // actions: void leftHandSpaceDrag( bool leftHandDragActive ); @@ -349,7 +346,6 @@ public slots: void shutdown(); void reset(); - void updateSeatedResetData(); void outputLogPoses(); void zeroOffsets(); void sendSeatedRecenter(); @@ -387,7 +383,6 @@ signals: void requireLockYChanged( bool value ); void requireLockZChanged( bool value ); void showLogMatricesButtonChanged( bool value ); - // void allowExternalEditsChanged( bool value ); void universeCenteredRotationChanged( bool value ); void offsetProfilesUpdated(); }; diff --git a/ver/versioncheck.json b/ver/versioncheck.json index ddc3617..6b53ef1 100644 --- a/ver/versioncheck.json +++ b/ver/versioncheck.json @@ -1 +1 @@ -{ "major": 5, "minor": 7, "patch": 4, "updateMessage": "", "optionalMessage": "" } +{ "major": 5, "minor": 8, "patch": 9, "updateMessage": "", "optionalMessage": "" }