diff --git a/advancedSettings.pro b/advancedSettings.pro index 43b9009..f33e46d 100644 --- a/advancedSettings.pro +++ b/advancedSettings.pro @@ -26,7 +26,34 @@ SOURCES += src/main.cpp\ src/tabcontrollers/audiomanager/AudioManagerWindows.cpp \ src/tabcontrollers/PttController.cpp \ src/tabcontrollers/AccessibilityTabController.cpp \ - src/utils/ChaperoneUtils.cpp + src/utils/ChaperoneUtils.cpp \ + release/moc_AccessibilityTabController.cpp \ + release/moc_AudioTabController.cpp \ + release/moc_ChaperoneTabController.cpp \ + release/moc_FixFloorTabController.cpp \ + release/moc_MoveCenterTabController.cpp \ + release/moc_overlaycontroller.cpp \ + release/moc_PttController.cpp \ + release/moc_ReviveTabController.cpp \ + release/moc_SettingsTabController.cpp \ + release/moc_StatisticsTabController.cpp \ + release/moc_SteamVRTabController.cpp \ + release/moc_UtilitiesTabController.cpp \ + src/tabcontrollers/audiomanager/AudioManagerWindows.cpp \ + src/tabcontrollers/AccessibilityTabController.cpp \ + src/tabcontrollers/AudioTabController.cpp \ + src/tabcontrollers/ChaperoneTabController.cpp \ + src/tabcontrollers/FixFloorTabController.cpp \ + src/tabcontrollers/MoveCenterTabController.cpp \ + src/tabcontrollers/PttController.cpp \ + src/tabcontrollers/ReviveTabController.cpp \ + src/tabcontrollers/SettingsTabController.cpp \ + src/tabcontrollers/StatisticsTabController.cpp \ + src/tabcontrollers/SteamVRTabController.cpp \ + src/tabcontrollers/UtilitiesTabController.cpp \ + src/utils/ChaperoneUtils.cpp \ + src/main.cpp \ + src/overlaycontroller.cpp HEADERS += src/overlaycontroller.h \ src/logging.h \ @@ -44,7 +71,33 @@ HEADERS += src/overlaycontroller.h \ src/tabcontrollers/PttController.h \ src/tabcontrollers/AccessibilityTabController.h \ src/utils/Matrix.h \ - src/utils/ChaperoneUtils.h + src/utils/ChaperoneUtils.h \ + release/moc_predefs.h \ + src/tabcontrollers/audiomanager/AudioManagerWindows.h \ + src/tabcontrollers/audiomanager/IPolicyConfig.h \ + src/tabcontrollers/AccessibilityTabController.h \ + src/tabcontrollers/AudioManager.h \ + src/tabcontrollers/AudioTabController.h \ + src/tabcontrollers/ChaperoneTabController.h \ + src/tabcontrollers/FixFloorTabController.h \ + src/tabcontrollers/MoveCenterTabController.h \ + src/tabcontrollers/PttController.h \ + src/tabcontrollers/ReviveTabController.h \ + src/tabcontrollers/SettingsTabController.h \ + src/tabcontrollers/StatisticsTabController.h \ + src/tabcontrollers/SteamVRTabController.h \ + src/tabcontrollers/UtilitiesTabController.h \ + src/utils/ChaperoneUtils.h \ + src/utils/Matrix.h \ + src/logging.h \ + src/overlaycontroller.h \ + third-party/easylogging++/easylogging++.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h \ + third-party/openvr/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h \ + third-party/openvr/headers/openvr.h \ + third-party/openvr/headers/openvr_capi.h \ + third-party/openvr/headers/openvr_driver.h INCLUDEPATH += third-party/openvr/headers \ third-party/easylogging++ @@ -54,3 +107,39 @@ unix:LIBS += -L"$$PWD/third-party/openvr/lib/linux64" LIBS += -lopenvr_api -luser32 -lole32 DESTDIR = bin/win64/AdvancedSettings + +DISTFILES += \ + src/res/qml/ptt_notification.png \ + src/res/qml/backarrow.svg \ + src/res/qml/check.svg \ + src/res/qml/mic_off.svg \ + src/res/qml/mic_on.svg \ + src/res/qml/ptt_notification.svg \ + src/res/qml/speaker_off.svg \ + src/res/qml/speaker_on.svg \ + src/res/qml/qmldir \ + src/res/qml/AccessibilityPage.qml \ + src/res/qml/AudioPage.qml \ + src/res/qml/ChaperonePage.qml \ + src/res/qml/ChaperoneWarningsPage.qml \ + src/res/qml/FixFloorPage.qml \ + src/res/qml/mainwidget.qml \ + src/res/qml/MyComboBox.qml \ + src/res/qml/MyDialogOkCancelPopup.qml \ + src/res/qml/MyDialogOkPopup.qml \ + src/res/qml/MyPushButton.qml \ + src/res/qml/MyPushButton2.qml \ + src/res/qml/MyResources.qml \ + src/res/qml/MySlider.qml \ + src/res/qml/MyStackViewPage.qml \ + src/res/qml/MyText.qml \ + src/res/qml/MyTextField.qml \ + src/res/qml/MyToggleButton.qml \ + src/res/qml/PlayspacePage.qml \ + src/res/qml/PttControllerConfigDialog.qml \ + src/res/qml/RevivePage.qml \ + src/res/qml/RootPage.qml \ + src/res/qml/SettingsPage.qml \ + src/res/qml/StatisticsPage.qml \ + src/res/qml/SteamVRPage.qml \ + src/res/qml/UtilitiesPage.qml diff --git a/installer/AdvancedSettings-Installer.exe b/installer/AdvancedSettings-Installer.exe index a0180d1..97059c1 100644 Binary files a/installer/AdvancedSettings-Installer.exe and b/installer/AdvancedSettings-Installer.exe differ diff --git a/src/res/qml/PlayspacePage.qml b/src/res/qml/PlayspacePage.qml index 3c7ec21..6b7b4e7 100644 --- a/src/res/qml/PlayspacePage.qml +++ b/src/res/qml/PlayspacePage.qml @@ -47,7 +47,7 @@ MyStackViewPage { } GridLayout { - columns: 4 + columns: 5 MyText { text: "X-Axis (Left/Right):" @@ -91,6 +91,14 @@ MyStackViewPage { } } + MyToggleButton { + id: lockXToggle + text: "Lock X" + onCheckedChanged: { + MoveCenterTabController.lockXToggle = this.checked + } + } + MyText { text: "Y-Axis (Down/Up):" Layout.preferredWidth: 380 @@ -131,6 +139,15 @@ MyStackViewPage { } } + + MyToggleButton { + id: lockYToggle + text: "Lock Y" + onCheckedChanged: { + MoveCenterTabController.lockYToggle = this.checked + } + } + MyText { text: "Z-Axis (Forth/Back):" Layout.preferredWidth: 380 @@ -170,6 +187,15 @@ MyStackViewPage { MoveCenterTabController.modOffsetZ(0.5) } } + + + MyToggleButton { + id: lockZToggle + text: "Lock Z" + onCheckedChanged: { + MoveCenterTabController.lockZToggle = this.checked + } + } } } } diff --git a/src/tabcontrollers/MoveCenterTabController.cpp b/src/tabcontrollers/MoveCenterTabController.cpp index a2729a6..d4240ff 100644 --- a/src/tabcontrollers/MoveCenterTabController.cpp +++ b/src/tabcontrollers/MoveCenterTabController.cpp @@ -189,33 +189,91 @@ void MoveCenterTabController::setRequireDoubleClick(bool value, bool notify) { } } -void MoveCenterTabController::modOffsetX(float value, bool notify) { - auto angle = m_rotation * 2 * M_PI / 360.0; - float offset[3] = { value, 0, 0 }; - rotateCoordinates(offset, angle); - parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone); - m_offsetX += value; +bool MoveCenterTabController::lockXToggle() const { + return m_lockXToggle; +} + +void MoveCenterTabController::setLockX(bool value, bool notify) { + m_lockXToggle = value; + auto settings = OverlayController::appSettings(); + settings->beginGroup("playspaceSettings"); + settings->setValue("lockXToggle", m_lockXToggle); + settings->endGroup(); + settings->sync(); if (notify) { - emit offsetXChanged(m_offsetX); + emit requireLockXChanged(m_lockXToggle); + } +} + + +bool MoveCenterTabController::lockYToggle() const { + return m_lockYToggle; +} + +void MoveCenterTabController::setLockY(bool value, bool notify) { + m_lockYToggle = value; + auto settings = OverlayController::appSettings(); + settings->beginGroup("playspaceSettings"); + settings->setValue("lockYToggle", m_lockXToggle); + settings->endGroup(); + settings->sync(); + if (notify) { + emit requireLockYChanged(m_lockYToggle); + } +} + +bool MoveCenterTabController::lockZToggle() const { + return m_lockZToggle; +} + +void MoveCenterTabController::setLockZ(bool value, bool notify) { + m_lockZToggle = value; + auto settings = OverlayController::appSettings(); + settings->beginGroup("playspaceSettings"); + settings->setValue("lockZToggle", m_lockZToggle); + settings->endGroup(); + settings->sync(); + if (notify) { + emit requireLockZChanged(m_lockZToggle); + } +} + + + +void MoveCenterTabController::modOffsetX(float value, bool notify) { + //TODO ? possible issue with locking position this way + if (!m_lockXToggle) { + auto angle = m_rotation * 2 * M_PI / 360.0; + float offset[3] = { value, 0, 0 }; + rotateCoordinates(offset, angle); + parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone); + m_offsetX += value; + if (notify) { + emit offsetXChanged(m_offsetX); + } } } void MoveCenterTabController::modOffsetY(float value, bool notify) { - parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value, m_adjustChaperone); - m_offsetY += value; - if (notify) { - emit offsetYChanged(m_offsetY); + if (!m_lockYToggle) { + parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value, m_adjustChaperone); + m_offsetY += value; + if (notify) { + emit offsetYChanged(m_offsetY); + } } } void MoveCenterTabController::modOffsetZ(float value, bool notify) { - auto angle = m_rotation * 2 * M_PI / 360.0; - float offset[3] = { 0, 0, value }; - rotateCoordinates(offset, angle); - parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone); - m_offsetZ += value; - if (notify) { - emit offsetZChanged(m_offsetZ); + if (!m_lockZToggle) { + auto angle = m_rotation * 2 * M_PI / 360.0; + float offset[3] = { 0, 0, value }; + rotateCoordinates(offset, angle); + parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone); + m_offsetZ += value; + if (notify) { + emit offsetZChanged(m_offsetZ); + } } } @@ -351,13 +409,33 @@ void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe }; // offset is un-rotated coordinates - m_offsetX += diff[0]; - m_offsetY += diff[1]; - m_offsetZ += diff[2]; + + //prevents UI from updating if axis movement is locked + if (!m_lockXToggle) { + m_offsetX += diff[0]; + } + if (!m_lockYToggle) { + m_offsetY += diff[1]; + } + if (!m_lockZToggle) { + m_offsetZ += diff[2]; + } + + rotateCoordinates(diff, angle); + //If locked removes movement + if (m_lockXToggle) { + diff[0] = 0; + } + if (m_lockYToggle) { + diff[1] = 0; + } + if (m_lockZToggle) { + diff[2] = 0; + } - parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone); + parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone); } m_lastControllerPosition[0] = absoluteControllerPosition[0]; m_lastControllerPosition[1] = absoluteControllerPosition[1]; diff --git a/src/tabcontrollers/MoveCenterTabController.h b/src/tabcontrollers/MoveCenterTabController.h index d3fd079..1d39007 100644 --- a/src/tabcontrollers/MoveCenterTabController.h +++ b/src/tabcontrollers/MoveCenterTabController.h @@ -24,6 +24,9 @@ class MoveCenterTabController : public QObject { Q_PROPERTY(bool moveShortcutRight READ moveShortcutRight WRITE setMoveShortcutRight NOTIFY moveShortcutRightChanged) Q_PROPERTY(bool moveShortcutLeft READ moveShortcutLeft WRITE setMoveShortcutLeft NOTIFY moveShortcutLeftChanged) Q_PROPERTY(bool requireDoubleClick READ requireDoubleClick WRITE setRequireDoubleClick NOTIFY requireDoubleClickChanged) + Q_PROPERTY(bool lockXToggle READ lockXToggle WRITE setLockX NOTIFY requireLockXChanged) + Q_PROPERTY(bool lockYToggle READ lockYToggle WRITE setLockY NOTIFY requireLockYChanged) + Q_PROPERTY(bool lockZToggle READ lockZToggle WRITE setLockZ NOTIFY requireLockZChanged) private: OverlayController* parent; @@ -42,6 +45,9 @@ private: bool m_moveShortcutRightEnabled = false; bool m_moveShortcutLeftEnabled = false; bool m_requireDoubleClick = false; + bool m_lockXToggle = false; + bool m_lockYToggle = false; + bool m_lockZToggle = false; std::chrono::system_clock::time_point lastMoveButtonClick[2]; unsigned settingsUpdateCounter = 0; @@ -62,6 +68,9 @@ public: bool moveShortcutRight() const; bool moveShortcutLeft() const; bool requireDoubleClick() const; + bool lockXToggle() const; + bool lockYToggle() const; + bool lockZToggle() const; public slots: int trackingUniverse() const; @@ -82,6 +91,11 @@ public slots: void modOffsetX(float value, bool notify = true); void modOffsetY(float value, bool notify = true); void modOffsetZ(float value, bool notify = true); + + void setLockX(bool value, bool notify = true); + void setLockY(bool value, bool notify = true); + void setLockZ(bool value, bool notify = true); + void reset(); signals: @@ -94,6 +108,9 @@ signals: void moveShortcutRightChanged(bool value); void moveShortcutLeftChanged(bool value); void requireDoubleClickChanged(bool value); + void requireLockXChanged(bool value); + void requireLockYChanged(bool value); + void requireLockZChanged(bool value); }; } // namespace advsettings