5.8.3 (#658)
* add delay if interface not found * adjust initialization behavior * pushed for debugging reasons for concerned parties * comment out simple recenter * remove old style motion, some minor optimizations * optimize default case check * optimized default condition * change manifest install behavior to trigger on desktop mode as well * add desktop mode binding launch * add tracker overlay option to utils * commit to check status * attempt to fix native LH issues with chaperone when exiting * add desktop mode toggle and some cleanup * remove adjust chaperone * remove clang format from ci, increment version, cleanup * update circle ci * fix conversion warning * add F13-19 to keyboard parser * add additional logging around failure to initialize * add unsaved changes * update version 5.8.1 * fix some collisions in enum declaration * add controller powers on steamvr, and no HMD to steamvr tab, increment version * slightly alter drag movement, fix qml issue * code cleanup * fix logspam/attempt to delete non existant overlays * increment version 5.8.3
This commit is contained in:
+1
-1
@@ -34,7 +34,7 @@ init:
|
|||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- python ./build_scripts/append_to_version_file.py %APPVEYOR_REPO_COMMIT:~0,8%
|
- python ./build_scripts/append_to_version_file.py %APPVEYOR_REPO_COMMIT:~0,8%
|
||||||
- python ./build_scripts/run-clang-format.py ./src -r --clang-format-executable "C:\Program Files\LLVM\bin\clang-format.exe" --color always
|
# - python ./build_scripts/run-clang-format.py ./src -r --clang-format-executable "C:\Program Files\LLVM\bin\clang-format.exe" --color always
|
||||||
- call "build_windows.cmd"
|
- call "build_windows.cmd"
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
+12
-12
@@ -29,18 +29,18 @@ jobs:
|
|||||||
sudo add-apt-repository 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main'
|
sudo add-apt-repository 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main'
|
||||||
sudo add-apt-repository 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
sudo add-apt-repository 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
- run:
|
#- run:
|
||||||
name: Install LLVM-8 binaries
|
# name: Install LLVM-8 binaries
|
||||||
# clang is required due to a check by Qmake.
|
# # clang is required due to a check by Qmake.
|
||||||
# clang-tidy-8 has new errors compared to clang-tidy-7, so we haven't upgraded.
|
# # clang-tidy-8 has new errors compared to clang-tidy-7, so we haven't upgraded.
|
||||||
command: |
|
# command: |
|
||||||
sudo apt-get install clang-format-8 -y
|
# sudo apt-get install clang-format-8 -y
|
||||||
sudo apt-get install clang-tidy-7 -y
|
# sudo apt-get install clang-tidy-7 -y
|
||||||
sudo apt-get install clang-8 -y
|
# sudo apt-get install clang-8 -y
|
||||||
sudo apt-get install clang -y
|
# sudo apt-get install clang -y
|
||||||
- run:
|
#- run:
|
||||||
name: Run clang-format
|
# name: Run clang-format
|
||||||
command: python ./build_scripts/run-clang-format.py ./src -r --color always --clang-format-executable clang-format-8
|
# command: python ./build_scripts/run-clang-format.py ./src -r --color always --clang-format-executable clang-format-8
|
||||||
- run:
|
- run:
|
||||||
name: Install g++
|
name: Install g++
|
||||||
command: |
|
command: |
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ before_install:
|
|||||||
- sudo apt update -qq
|
- sudo apt update -qq
|
||||||
- sudo apt install clang-format-8
|
- sudo apt install clang-format-8
|
||||||
- clang-format-8 --version
|
- clang-format-8 --version
|
||||||
- python ./build_scripts/run-clang-format.py ./src -r --color always --clang-format-executable clang-format-8
|
# - python ./build_scripts/run-clang-format.py ./src -r --color always --clang-format-executable clang-format-8
|
||||||
- sed -i 's/QMAKE_CXXFLAGS += -flto//g' ./build_scripts/qt/compilers/clang-gcc-common-switches.pri # CI version of clang can't handle LTO
|
- sed -i 's/QMAKE_CXXFLAGS += -flto//g' ./build_scripts/qt/compilers/clang-gcc-common-switches.pri # CI version of clang can't handle LTO
|
||||||
- sed -i 's/QMAKE_LFLAGS += -flto -fuse-ld=gold//g' ./build_scripts/qt/compilers/clang-gcc-common-switches.pri # CI version of clang can't handle LTO
|
- sed -i 's/QMAKE_LFLAGS += -flto -fuse-ld=gold//g' ./build_scripts/qt/compilers/clang-gcc-common-switches.pri # CI version of clang can't handle LTO
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
5.7.4-release
|
5.8.3-release
|
||||||
@@ -45,6 +45,7 @@ DISTFILES += \
|
|||||||
src/res/qml/utilities_page/media_keys/* \
|
src/res/qml/utilities_page/media_keys/* \
|
||||||
src/res/qml/utilities_page/keyboard_utils/* \
|
src/res/qml/utilities_page/keyboard_utils/* \
|
||||||
src/res/qml/utilities_page/alarm_clock/* \
|
src/res/qml/utilities_page/alarm_clock/* \
|
||||||
|
src/res/qml/utilities_page/misc/* \
|
||||||
src/res/qml/audio_page/dialog_boxes/* \
|
src/res/qml/audio_page/dialog_boxes/* \
|
||||||
src/res/qml/audio_page/device_selector/* \
|
src/res/qml/audio_page/device_selector/* \
|
||||||
src/res/qml/audio_page/proximity/* \
|
src/res/qml/audio_page/proximity/* \
|
||||||
|
|||||||
@@ -65,8 +65,20 @@ std::optional<Token> getFunctionNumberExtended( const char& character ) noexcept
|
|||||||
return Token::KEY_F11;
|
return Token::KEY_F11;
|
||||||
case '2':
|
case '2':
|
||||||
return Token::KEY_F12;
|
return Token::KEY_F12;
|
||||||
// Theoretically we could extende out to f19, but as F12 is the only
|
case '3':
|
||||||
// function key on Standard Keyboard.
|
return Token::KEY_F13;
|
||||||
|
case '4':
|
||||||
|
return Token::KEY_F14;
|
||||||
|
case '5':
|
||||||
|
return Token::KEY_F15;
|
||||||
|
case '6':
|
||||||
|
return Token::KEY_F16;
|
||||||
|
case '7':
|
||||||
|
return Token::KEY_F17;
|
||||||
|
case '8':
|
||||||
|
return Token::KEY_F18;
|
||||||
|
case '9':
|
||||||
|
return Token::KEY_F19;
|
||||||
default:
|
default:
|
||||||
LOG( INFO ) << "Unknown function key number: " << character;
|
LOG( INFO ) << "Unknown function key number: " << character;
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
@@ -477,6 +489,20 @@ bool isLiteral( const Token token ) noexcept
|
|||||||
return true;
|
return true;
|
||||||
case Token::KEY_F12:
|
case Token::KEY_F12:
|
||||||
return true;
|
return true;
|
||||||
|
case Token::KEY_F13:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F14:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F15:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F16:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F17:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F18:
|
||||||
|
return true;
|
||||||
|
case Token::KEY_F19:
|
||||||
|
return true;
|
||||||
|
|
||||||
case Token::KEY_BACKSPACE:
|
case Token::KEY_BACKSPACE:
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -20,8 +20,15 @@ enum class Token
|
|||||||
KEY_F10,
|
KEY_F10,
|
||||||
KEY_F11,
|
KEY_F11,
|
||||||
KEY_F12,
|
KEY_F12,
|
||||||
|
KEY_F13,
|
||||||
|
KEY_F14,
|
||||||
|
KEY_F15,
|
||||||
|
KEY_F16,
|
||||||
|
KEY_F17,
|
||||||
|
KEY_F18,
|
||||||
|
KEY_F19,
|
||||||
|
|
||||||
KEY_BACKSPACE,
|
KEY_BACKSPACE = 150,
|
||||||
KEY_SPACE,
|
KEY_SPACE,
|
||||||
KEY_TAB,
|
KEY_TAB,
|
||||||
KEY_ESC,
|
KEY_ESC,
|
||||||
|
|||||||
@@ -105,6 +105,20 @@ unsigned int tokenToKeySym( const Token token )
|
|||||||
return XK_F11;
|
return XK_F11;
|
||||||
case Token::KEY_F12:
|
case Token::KEY_F12:
|
||||||
return XK_F12;
|
return XK_F12;
|
||||||
|
case Token::KEY_F13:
|
||||||
|
return XK_F13;
|
||||||
|
case Token::KEY_F14:
|
||||||
|
return XK_F14;
|
||||||
|
case Token::KEY_F15:
|
||||||
|
return XK_F15;
|
||||||
|
case Token::KEY_F16:
|
||||||
|
return XK_F16;
|
||||||
|
case Token::KEY_F17:
|
||||||
|
return XK_F17;
|
||||||
|
case Token::KEY_F18:
|
||||||
|
return XK_F18;
|
||||||
|
case Token::KEY_F19:
|
||||||
|
return XK_F19;
|
||||||
|
|
||||||
case Token::KEY_BACKSPACE:
|
case Token::KEY_BACKSPACE:
|
||||||
return XK_BackSpace;
|
return XK_BackSpace;
|
||||||
|
|||||||
@@ -36,6 +36,20 @@ WORD convertToVirtualKeycode( const Token token )
|
|||||||
return VK_F11;
|
return VK_F11;
|
||||||
case Token::KEY_F12:
|
case Token::KEY_F12:
|
||||||
return VK_F12;
|
return VK_F12;
|
||||||
|
case Token::KEY_F13:
|
||||||
|
return VK_F13;
|
||||||
|
case Token::KEY_F14:
|
||||||
|
return VK_F14;
|
||||||
|
case Token::KEY_F15:
|
||||||
|
return VK_F15;
|
||||||
|
case Token::KEY_F16:
|
||||||
|
return VK_F16;
|
||||||
|
case Token::KEY_F17:
|
||||||
|
return VK_F17;
|
||||||
|
case Token::KEY_F18:
|
||||||
|
return VK_F18;
|
||||||
|
case Token::KEY_F19:
|
||||||
|
return VK_F19;
|
||||||
|
|
||||||
case Token::KEY_BACKSPACE:
|
case Token::KEY_BACKSPACE:
|
||||||
return VK_BACK;
|
return VK_BACK;
|
||||||
|
|||||||
+6
-4
@@ -4,8 +4,8 @@
|
|||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
extern "C" __declspec( dllexport ) DWORD NvOptimusEnablement = 0x00000001;
|
extern "C" __declspec( dllexport ) DWORD NvOptimusEnablement = 0x00000001;
|
||||||
extern "C" __declspec( dllexport ) DWORD
|
extern "C" __declspec( dllexport ) DWORD AmdPowerXpressRequestHighPerformance
|
||||||
AmdPowerXpressRequestHighPerformance = 0x00000001;
|
= 0x00000001;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INITIALIZE_EASYLOGGINGPP
|
INITIALIZE_EASYLOGGINGPP
|
||||||
@@ -81,7 +81,7 @@ int main( int argc, char* argv[] )
|
|||||||
application_strings::applicationKey );
|
application_strings::applicationKey );
|
||||||
|
|
||||||
// Attempts to install the application manifest on all "regular" starts.
|
// Attempts to install the application manifest on all "regular" starts.
|
||||||
if ( !commandLineArgs.desktopMode && !commandLineArgs.forceNoManifest )
|
if ( !commandLineArgs.forceNoManifest )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,9 @@ int main( int argc, char* argv[] )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( commandLineArgs.desktopMode )
|
if ( commandLineArgs.desktopMode
|
||||||
|
|| settings::getSetting(
|
||||||
|
settings::BoolSetting::APPLICATION_desktopModeToggle ) )
|
||||||
{
|
{
|
||||||
auto m_pWindow = new QQuickWindow();
|
auto m_pWindow = new QQuickWindow();
|
||||||
qobject_cast<QQuickItem*>( quickObj )
|
qobject_cast<QQuickItem*>( quickObj )
|
||||||
|
|||||||
+50
-33
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
namespace openvr_init
|
namespace openvr_init
|
||||||
{
|
{
|
||||||
void initializeProperly( const OpenVrInitializationType initType )
|
bool initializeProperly( const OpenVrInitializationType initType )
|
||||||
{
|
{
|
||||||
auto initializationType = vr::EVRApplicationType::VRApplication_Other;
|
auto initializationType = vr::EVRApplicationType::VRApplication_Other;
|
||||||
if ( initType == OpenVrInitializationType::Overlay )
|
if ( initType == OpenVrInitializationType::Overlay )
|
||||||
@@ -34,7 +34,7 @@ void initializeProperly( const OpenVrInitializationType initType )
|
|||||||
+ std::string(
|
+ std::string(
|
||||||
vr::VR_GetVRInitErrorAsEnglishDescription(
|
vr::VR_GetVRInitErrorAsEnglishDescription(
|
||||||
initError ) );
|
initError ) );
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
LOG( ERROR ) << "Failed to initialize OpenVR: "
|
LOG( ERROR ) << "Failed to initialize OpenVR: "
|
||||||
+ std::string(
|
+ std::string(
|
||||||
@@ -45,75 +45,92 @@ void initializeProperly( const OpenVrInitializationType initType )
|
|||||||
// probably pre-maturely killing ourselves from some sort of OpenVR race
|
// probably pre-maturely killing ourselves from some sort of OpenVR race
|
||||||
// condition
|
// condition
|
||||||
// exit( EXIT_FAILURE );
|
// exit( EXIT_FAILURE );
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
LOG( INFO ) << "OpenVR initialized successfully.";
|
||||||
LOG( INFO ) << "OpenVR initialized successfully.";
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeOpenVR( const OpenVrInitializationType initType )
|
void initializeOpenVR( const OpenVrInitializationType initType, int count )
|
||||||
{
|
{
|
||||||
initializeProperly( initType );
|
bool success = initializeProperly( initType );
|
||||||
|
|
||||||
// The function call and error message was the same for all version checks.
|
// The function call and error message was the same for all version checks.
|
||||||
// Specific error messages are unlikely to be necessary since both the type
|
// Specific error messages are unlikely to be necessary since both the type
|
||||||
// and version are in the string and will be output.
|
// and version are in the string and will be output.
|
||||||
auto reportVersionError = []( const char* const interfaceAndVersion ) {
|
auto reportVersionError
|
||||||
// 5.7.1
|
= []( const char* const interfaceAndVersion, const int trynumber )
|
||||||
// Stop behavior from exiting out, again seems to be related to some
|
{
|
||||||
// sort of race condition in non-native Headsets (i.e. not lighthouse)
|
// as of 5.8.1 Based on some information from valve, if ANY interface
|
||||||
|
// fails to load we should have issues. we will re-initialize a few
|
||||||
// QMessageBox::critical(
|
// times if that is the case and hope that fixes things
|
||||||
// nullptr,
|
|
||||||
// "OpenVR Advanced Settings Overlay",
|
|
||||||
// "OpenVR version is too outdated. Please update OpenVR." );
|
|
||||||
|
|
||||||
LOG( WARNING ) << "OpenVR version is invalid: Interface version "
|
LOG( WARNING ) << "OpenVR version is invalid: Interface version "
|
||||||
<< interfaceAndVersion << " not found.";
|
<< interfaceAndVersion << " not found. attempt number: "
|
||||||
// throw std::runtime_error(
|
<< std::to_string( trynumber );
|
||||||
// std::string( "OpenVR version is too outdated: Interface
|
|
||||||
// version " )
|
|
||||||
// + std::string( interfaceAndVersion )
|
|
||||||
// + std::string( " not found." ) );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check whether OpenVR is too outdated
|
// Check whether OpenVR is too outdated
|
||||||
|
|
||||||
|
// Sleep duration is an attempt to hopefully alleviate a possible race
|
||||||
|
// condition in steamvr
|
||||||
if ( !vr::VR_IsInterfaceVersionValid( vr::IVRSystem_Version ) )
|
if ( !vr::VR_IsInterfaceVersionValid( vr::IVRSystem_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRSystem_Version );
|
reportVersionError( vr::IVRSystem_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRSettings_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRSettings_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRSettings_Version );
|
reportVersionError( vr::IVRSettings_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVROverlay_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVROverlay_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVROverlay_Version );
|
reportVersionError( vr::IVROverlay_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRApplications_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRApplications_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRApplications_Version );
|
reportVersionError( vr::IVRApplications_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRChaperone_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRChaperone_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRChaperone_Version );
|
reportVersionError( vr::IVRChaperone_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRChaperoneSetup_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRChaperoneSetup_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRChaperoneSetup_Version );
|
reportVersionError( vr::IVRChaperoneSetup_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRCompositor_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRCompositor_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRCompositor_Version );
|
reportVersionError( vr::IVRCompositor_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRNotifications_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRNotifications_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRNotifications_Version );
|
reportVersionError( vr::IVRNotifications_Version, count );
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRInput_Version ) )
|
else if ( !vr::VR_IsInterfaceVersionValid( vr::IVRInput_Version ) )
|
||||||
{
|
{
|
||||||
reportVersionError( vr::IVRInput_Version );
|
reportVersionError( vr::IVRInput_Version, count );
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
if ( !success && count < 3 )
|
||||||
|
{
|
||||||
|
LOG( WARNING ) << "An error occured on initialization of "
|
||||||
|
"openvr/steamvr attempting again "
|
||||||
|
<< std::to_string( count + 1 ) << " of 3 Attempts";
|
||||||
|
std::this_thread::sleep_for( std::chrono::seconds( 5 ) );
|
||||||
|
// 5.8.1 Unknown if VR shutdown needs to be callled if vr init fails
|
||||||
|
initializeOpenVR( initType, ( count + 1 ) );
|
||||||
|
}
|
||||||
|
if ( count >= 3 )
|
||||||
|
{
|
||||||
|
LOG( ERROR ) << "initialization errors persist proceeding anyways";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ enum class OpenVrInitializationType
|
|||||||
Utility,
|
Utility,
|
||||||
};
|
};
|
||||||
|
|
||||||
void initializeOpenVR( const OpenVrInitializationType initType );
|
void initializeOpenVR( const OpenVrInitializationType initType, int count = 0 );
|
||||||
|
|
||||||
} // namespace openvr_init
|
} // namespace openvr_init
|
||||||
|
|||||||
+56
-44
@@ -116,6 +116,13 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
LOG( ERROR ) << "Could not find alarm01 sound file " << alarmFileName;
|
LOG( ERROR ) << "Could not find alarm01 sound file " << alarmFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we have desktop mode flag ignore waht toggle says otherwise we use
|
||||||
|
// toggle
|
||||||
|
if ( !m_desktopMode )
|
||||||
|
{
|
||||||
|
m_desktopMode = desktopModeToggle();
|
||||||
|
}
|
||||||
|
|
||||||
QSurfaceFormat format;
|
QSurfaceFormat format;
|
||||||
// Qt's QOpenGLPaintDevice is not compatible with OpenGL versions >= 3.0
|
// Qt's QOpenGLPaintDevice is not compatible with OpenGL versions >= 3.0
|
||||||
// NVIDIA does not care, but unfortunately AMD does
|
// NVIDIA does not care, but unfortunately AMD does
|
||||||
@@ -183,7 +190,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"OverlayController",
|
"OverlayController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = objectAddress;
|
QObject* obj = objectAddress;
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -197,7 +205,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"SteamVRTabController",
|
"SteamVRTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_steamVRTabController );
|
QObject* obj = &( objectAddress->m_steamVRTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -207,7 +216,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"ChaperoneTabController",
|
"ChaperoneTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_chaperoneTabController );
|
QObject* obj = &( objectAddress->m_chaperoneTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -217,7 +227,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"MoveCenterTabController",
|
"MoveCenterTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_moveCenterTabController );
|
QObject* obj = &( objectAddress->m_moveCenterTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -227,7 +238,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"FixFloorTabController",
|
"FixFloorTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_fixFloorTabController );
|
QObject* obj = &( objectAddress->m_fixFloorTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -237,7 +249,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"AudioTabController",
|
"AudioTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_audioTabController );
|
QObject* obj = &( objectAddress->m_audioTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -247,7 +260,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"StatisticsTabController",
|
"StatisticsTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_statisticsTabController );
|
QObject* obj = &( objectAddress->m_statisticsTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -257,7 +271,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"SettingsTabController",
|
"SettingsTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_settingsTabController );
|
QObject* obj = &( objectAddress->m_settingsTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -267,7 +282,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"UtilitiesTabController",
|
"UtilitiesTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_utilitiesTabController );
|
QObject* obj = &( objectAddress->m_utilitiesTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -277,7 +293,8 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"VideoTabController",
|
"VideoTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_videoTabController );
|
QObject* obj = &( objectAddress->m_videoTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -287,13 +304,19 @@ OverlayController::OverlayController( bool desktopMode,
|
|||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
"RotationTabController",
|
"RotationTabController",
|
||||||
[]( QQmlEngine*, QJSEngine* ) {
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_rotationTabController );
|
QObject* obj = &( objectAddress->m_rotationTabController );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
} );
|
} );
|
||||||
qmlRegisterSingletonType<alarm_clock::VrAlarm>(
|
qmlRegisterSingletonType<alarm_clock::VrAlarm>(
|
||||||
qmlSingletonImportName, 1, 0, "VrAlarm", []( QQmlEngine*, QJSEngine* ) {
|
qmlSingletonImportName,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
"VrAlarm",
|
||||||
|
[]( QQmlEngine*, QJSEngine* )
|
||||||
|
{
|
||||||
QObject* obj = &( objectAddress->m_alarm );
|
QObject* obj = &( objectAddress->m_alarm );
|
||||||
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership );
|
||||||
return obj;
|
return obj;
|
||||||
@@ -504,8 +527,11 @@ void OverlayController::SetWidget( QQuickItem* quickItem,
|
|||||||
if ( chapindex.first )
|
if ( chapindex.first )
|
||||||
{
|
{
|
||||||
m_chaperoneTabController.applyChaperoneProfile( chapindex.second );
|
m_chaperoneTabController.applyChaperoneProfile( chapindex.second );
|
||||||
vr::VRApplications()->CancelApplicationLaunch(
|
bool success = vr::VRApplications()->CancelApplicationLaunch(
|
||||||
"openvr.tool.steamvr_room_setup" );
|
"openvr.tool.steamvr_room_setup" );
|
||||||
|
auto successsstr = success ? "true" : "false";
|
||||||
|
|
||||||
|
LOG( INFO ) << "Attempted to stop roomsetup: " << successsstr;
|
||||||
if ( vr::VRApplications()->GetApplicationProcessId(
|
if ( vr::VRApplications()->GetApplicationProcessId(
|
||||||
"openvr.tool.steamvr_room_setup" )
|
"openvr.tool.steamvr_room_setup" )
|
||||||
!= 0 )
|
!= 0 )
|
||||||
@@ -1245,15 +1271,7 @@ void OverlayController::mainEventLoop()
|
|||||||
|
|
||||||
if ( !chaperoneDataAlreadyUpdated )
|
if ( !chaperoneDataAlreadyUpdated )
|
||||||
{
|
{
|
||||||
// LOG(INFO) << "Re-loading chaperone data ...";
|
|
||||||
m_chaperoneUtils.loadChaperoneData();
|
m_chaperoneUtils.loadChaperoneData();
|
||||||
// LOG(INFO) << "Found " << m_chaperoneUtils.quadsCount() <<
|
|
||||||
// " chaperone quads."; if
|
|
||||||
// (m_chaperoneUtils.isChaperoneWellFormed()) { LOG(INFO) <<
|
|
||||||
// "Chaperone data seems to be well-formed.";
|
|
||||||
//} else {
|
|
||||||
// LOG(INFO) << "Chaperone data is NOT well-formed.";
|
|
||||||
//}
|
|
||||||
chaperoneDataAlreadyUpdated = true;
|
chaperoneDataAlreadyUpdated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1263,15 +1281,7 @@ void OverlayController::mainEventLoop()
|
|||||||
{
|
{
|
||||||
if ( !chaperoneDataAlreadyUpdated )
|
if ( !chaperoneDataAlreadyUpdated )
|
||||||
{
|
{
|
||||||
// LOG(INFO) << "Re-loading chaperone data ...";
|
|
||||||
m_chaperoneUtils.loadChaperoneData();
|
m_chaperoneUtils.loadChaperoneData();
|
||||||
// LOG(INFO) << "Found " << m_chaperoneUtils.quadsCount() <<
|
|
||||||
// " chaperone quads."; if
|
|
||||||
// (m_chaperoneUtils.isChaperoneWellFormed()) { LOG(INFO) <<
|
|
||||||
// "Chaperone data seems to be well-formed.";
|
|
||||||
//} else {
|
|
||||||
// LOG(INFO) << "Chaperone data is NOT well-formed.";
|
|
||||||
//}
|
|
||||||
chaperoneDataAlreadyUpdated = true;
|
chaperoneDataAlreadyUpdated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1323,20 +1333,6 @@ void OverlayController::mainEventLoop()
|
|||||||
= std::sqrt( vel[0] * vel[0] + vel[1] * vel[1] + vel[2] * vel[2] );
|
= std::sqrt( vel[0] * vel[0] + vel[1] * vel[1] + vel[2] * vel[2] );
|
||||||
}
|
}
|
||||||
auto universe = vr::VRCompositor()->GetTrackingSpace();
|
auto universe = vr::VRCompositor()->GetTrackingSpace();
|
||||||
// This Fix is hopefully temporary as OpenVR doesn't appear to have a way to
|
|
||||||
// tell if an application is OpenXR outside of VR_init which we don't have
|
|
||||||
// control over
|
|
||||||
/*
|
|
||||||
if ( vr::VRApplications()->GetApplicationProcessId(
|
|
||||||
"openvr.tool.steamvr_room_setup" )
|
|
||||||
== 0
|
|
||||||
&& openXRFixEnabled() )
|
|
||||||
{
|
|
||||||
// OpenXR applications will appear as RawAndUncalibrated.
|
|
||||||
// Unless Room Setup is running, treat this case as Standing.
|
|
||||||
universe = vr::TrackingUniverseStanding;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
m_moveCenterTabController.eventLoopTick( universe, devicePoses );
|
m_moveCenterTabController.eventLoopTick( universe, devicePoses );
|
||||||
m_utilitiesTabController.eventLoopTick();
|
m_utilitiesTabController.eventLoopTick();
|
||||||
m_statisticsTabController.eventLoopTick(
|
m_statisticsTabController.eventLoopTick(
|
||||||
@@ -1347,7 +1343,7 @@ void OverlayController::mainEventLoop()
|
|||||||
|
|
||||||
m_alarm.eventLoopTick();
|
m_alarm.eventLoopTick();
|
||||||
|
|
||||||
if ( vr::VROverlay()->IsDashboardVisible() )
|
if ( vr::VROverlay()->IsDashboardVisible() || m_desktopMode )
|
||||||
{
|
{
|
||||||
m_settingsTabController.dashboardLoopTick();
|
m_settingsTabController.dashboardLoopTick();
|
||||||
m_steamVRTabController.dashboardLoopTick();
|
m_steamVRTabController.dashboardLoopTick();
|
||||||
@@ -1669,6 +1665,22 @@ double OverlayController::soundVolume() const
|
|||||||
settings::DoubleSetting::APPLICATION_appVolume );
|
settings::DoubleSetting::APPLICATION_appVolume );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OverlayController::setDesktopModeToggle( bool value, bool notify )
|
||||||
|
{
|
||||||
|
settings::setSetting( settings::BoolSetting::APPLICATION_desktopModeToggle,
|
||||||
|
value );
|
||||||
|
if ( notify )
|
||||||
|
{
|
||||||
|
emit desktopModeToggleChanged( value );
|
||||||
|
}
|
||||||
|
settings::saveAllSettings();
|
||||||
|
}
|
||||||
|
bool OverlayController::desktopModeToggle() const
|
||||||
|
{
|
||||||
|
return settings::getSetting(
|
||||||
|
settings::BoolSetting::APPLICATION_desktopModeToggle );
|
||||||
|
}
|
||||||
|
|
||||||
void OverlayController::playActivationSound()
|
void OverlayController::playActivationSound()
|
||||||
{
|
{
|
||||||
if ( !m_noSound )
|
if ( !m_noSound )
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ class OverlayController : public QObject
|
|||||||
autoApplyChaperoneEnabledChanged )
|
autoApplyChaperoneEnabledChanged )
|
||||||
Q_PROPERTY( double soundVolume READ soundVolume WRITE setSoundVolume NOTIFY
|
Q_PROPERTY( double soundVolume READ soundVolume WRITE setSoundVolume NOTIFY
|
||||||
soundVolumeChanged )
|
soundVolumeChanged )
|
||||||
|
Q_PROPERTY( bool desktopModeToggle READ desktopModeToggle WRITE
|
||||||
|
setDesktopModeToggle NOTIFY desktopModeToggleChanged )
|
||||||
|
|
||||||
private:
|
private:
|
||||||
vr::VROverlayHandle_t m_ulOverlayHandle = vr::k_ulOverlayHandleInvalid;
|
vr::VROverlayHandle_t m_ulOverlayHandle = vr::k_ulOverlayHandleInvalid;
|
||||||
@@ -255,6 +257,7 @@ public:
|
|||||||
std::string autoApplyChaperoneName();
|
std::string autoApplyChaperoneName();
|
||||||
|
|
||||||
double soundVolume() const;
|
double soundVolume() const;
|
||||||
|
bool desktopModeToggle() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void renderOverlay();
|
void renderOverlay();
|
||||||
@@ -282,6 +285,7 @@ public slots:
|
|||||||
void setDebugState( int value, bool notify = true );
|
void setDebugState( int value, bool notify = true );
|
||||||
void setAutoApplyChaperoneEnabled( bool value, bool notify = true );
|
void setAutoApplyChaperoneEnabled( bool value, bool notify = true );
|
||||||
void setSoundVolume( double value, bool notify = true );
|
void setSoundVolume( double value, bool notify = true );
|
||||||
|
void setDesktopModeToggle( bool value, bool notify = true );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void keyBoardInputSignal( QString input, unsigned long userValue = 0 );
|
void keyBoardInputSignal( QString input, unsigned long userValue = 0 );
|
||||||
@@ -296,6 +300,7 @@ signals:
|
|||||||
void debugStateChanged( int value );
|
void debugStateChanged( int value );
|
||||||
void autoApplyChaperoneEnabledChanged( bool value );
|
void autoApplyChaperoneEnabledChanged( bool value );
|
||||||
void soundVolumeChanged( double value );
|
void soundVolumeChanged( double value );
|
||||||
|
void desktopModeToggleChanged( bool value );
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace advsettings
|
} // namespace advsettings
|
||||||
|
|||||||
@@ -92,37 +92,19 @@ MyStackViewPage {
|
|||||||
SettingsTabController.setAutoStartEnabled(checked, false)
|
SettingsTabController.setAutoStartEnabled(checked, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
MyToggleButton {
|
||||||
|
id: desktopModeToggleButton
|
||||||
|
text: "Desktop Mode (restart required)"
|
||||||
|
onCheckedChanged: {
|
||||||
|
OverlayController.setDesktopModeToggle(this.checked, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MyToggleButton {
|
MyToggleButton {
|
||||||
id: allowExternalEditsToggle
|
id: allowExternalEditsToggle
|
||||||
text: "Allow External App Chaperone Edits (Danger)"
|
text: "Allow External App Chaperone Edits (Danger)"
|
||||||
onCheckedChanged: {
|
onCheckedChanged: {
|
||||||
MoveCenterTabController.setAllowExternalEdits(checked, true)
|
MoveCenterTabController.setAllowExternalEdits(checked, true)
|
||||||
seatedOldExternalWarning.visible = checked && MoveCenterTabController.oldStyleMotion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MyToggleButton {
|
|
||||||
id: oldStyleMotionToggle
|
|
||||||
text: "Old-Style Motion (per-frame disk writes)"
|
|
||||||
onCheckedChanged: {
|
|
||||||
MoveCenterTabController.setOldStyleMotion(checked, true)
|
|
||||||
seatedOldExternalWarning.visible = MoveCenterTabController.allowExternalEdits && checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout{
|
|
||||||
|
|
||||||
MyText {
|
|
||||||
id: seatedOldExternalWarning
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
font.pointSize: 20
|
|
||||||
color: "#FFA500"
|
|
||||||
text: "WARNING: 'Allow External App Chaperone Edits' + 'Old-Style Motion' + 'Enable Motion Features When in Seated Mode' active together may cause space center misalignment. Load the «Autosaved Profile» in the 'Chaperone' tab to fix."
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
Layout.leftMargin: 20
|
|
||||||
Layout.rightMargin: 20
|
|
||||||
Layout.preferredWidth: 900
|
|
||||||
//Layout.fillWidth: true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,13 +195,6 @@ MyStackViewPage {
|
|||||||
OverlayController.setExclusiveInputEnabled(this.checked, true)
|
OverlayController.setExclusiveInputEnabled(this.checked, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MyToggleButton {
|
|
||||||
id: spaceAdjustChaperoneToggle
|
|
||||||
text: "Adjust Chaperone"
|
|
||||||
onCheckedChanged: {
|
|
||||||
MoveCenterTabController.adjustChaperone = this.checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -350,7 +325,6 @@ MyStackViewPage {
|
|||||||
settingsAutoStartToggle.checked = SettingsTabController.autoStartEnabled
|
settingsAutoStartToggle.checked = SettingsTabController.autoStartEnabled
|
||||||
|
|
||||||
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
|
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
|
||||||
oldStyleMotionToggle.checked = MoveCenterTabController.oldStyleMotion
|
|
||||||
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
|
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
|
||||||
|
|
||||||
disableCrashRecoveryToggle.checked = !OverlayController.crashRecoveryDisabled
|
disableCrashRecoveryToggle.checked = !OverlayController.crashRecoveryDisabled
|
||||||
@@ -366,10 +340,9 @@ MyStackViewPage {
|
|||||||
oculusSdkToggleButton.checked = SettingsTabController.oculusSdkToggle
|
oculusSdkToggleButton.checked = SettingsTabController.oculusSdkToggle
|
||||||
exclusiveInputToggleButton.checked = OverlayController.exclusiveInputEnabled
|
exclusiveInputToggleButton.checked = OverlayController.exclusiveInputEnabled
|
||||||
autoApplyChaperoneToggleButton.checked = OverlayController.autoApplyChaperoneEnabled
|
autoApplyChaperoneToggleButton.checked = OverlayController.autoApplyChaperoneEnabled
|
||||||
spaceAdjustChaperoneToggle.checked = MoveCenterTabController.adjustChaperone
|
desktopModeToggleButton.checked = OverlayController.desktopModeToggle
|
||||||
|
|
||||||
|
|
||||||
seatedOldExternalWarning.visible = MoveCenterTabController.allowExternalEdits && MoveCenterTabController.oldStyleMotion
|
|
||||||
reloadChaperoneProfiles()
|
reloadChaperoneProfiles()
|
||||||
volumeSlider.value = OverlayController.soundVolume
|
volumeSlider.value = OverlayController.soundVolume
|
||||||
}
|
}
|
||||||
@@ -391,18 +364,10 @@ MyStackViewPage {
|
|||||||
target: MoveCenterTabController
|
target: MoveCenterTabController
|
||||||
onAllowExternalEditsChanged: {
|
onAllowExternalEditsChanged: {
|
||||||
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
|
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
|
||||||
seatedOldExternalWarning.visible = MoveCenterTabController.allowExternalEdits && MoveCenterTabController.oldStyleMotion
|
|
||||||
}
|
|
||||||
onOldStyleMotionChanged: {
|
|
||||||
oldStyleMotionToggle.checked = MoveCenterTabController.oldStyleMotion
|
|
||||||
seatedOldExternalWarning.visible = MoveCenterTabController.allowExternalEdits && MoveCenterTabController.oldStyleMotion
|
|
||||||
}
|
}
|
||||||
onUniverseCenteredRotationChanged: {
|
onUniverseCenteredRotationChanged: {
|
||||||
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
|
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
|
||||||
}
|
}
|
||||||
onAdjustChaperoneChanged:{
|
|
||||||
spaceAdjustChaperoneToggle.checked = MoveCenterTabController.adjustChaperone
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
@@ -440,6 +405,9 @@ MyStackViewPage {
|
|||||||
onSoundVolumeChanged:{
|
onSoundVolumeChanged:{
|
||||||
volumeSlider.value = OverlayController.soundVolume
|
volumeSlider.value = OverlayController.soundVolume
|
||||||
}
|
}
|
||||||
|
onDesktopModeToggleChanged:{
|
||||||
|
desktopModeToggleButton.checked = OverlayController.desktopModeToggle
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Connections{
|
Connections{
|
||||||
target: ChaperoneTabController
|
target: ChaperoneTabController
|
||||||
|
|||||||
@@ -89,13 +89,6 @@ GroupBox {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RowLayout{
|
RowLayout{
|
||||||
MyPushButton{
|
|
||||||
text:"Ignore Boundary State"
|
|
||||||
Layout.preferredWidth: 300
|
|
||||||
onClicked:{
|
|
||||||
MoveCenterTabController.setIgnoreChaperoneState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item{
|
Item{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ GroupBox {
|
|||||||
MyToggleButton {
|
MyToggleButton {
|
||||||
id: steamvrPerformanceGraphToggle
|
id: steamvrPerformanceGraphToggle
|
||||||
text: "Enable Timing Overlay"
|
text: "Enable Timing Overlay"
|
||||||
Layout.preferredWidth: 400
|
Layout.preferredWidth: 300
|
||||||
onCheckedChanged: {
|
onCheckedChanged: {
|
||||||
SteamVRTabController.setPerformanceGraph(this.checked, false)
|
SteamVRTabController.setPerformanceGraph(this.checked, false)
|
||||||
}
|
}
|
||||||
@@ -44,32 +44,18 @@ GroupBox {
|
|||||||
Layout.preferredWidth: 20
|
Layout.preferredWidth: 20
|
||||||
text: " "
|
text: " "
|
||||||
}
|
}
|
||||||
|
|
||||||
MyToggleButton {
|
MyToggleButton {
|
||||||
id: steamvrSystemButtonToggle
|
id: steamvrNoHMDToggle
|
||||||
Layout.fillWidth: true
|
text: "Require HMD"
|
||||||
text: "Enable System Button Binding"
|
Layout.preferredWidth: 300
|
||||||
onCheckedChanged: {
|
onCheckedChanged: {
|
||||||
SteamVRTabController.setSystemButton(this.checked, false)
|
SteamVRTabController.setNoHMD(this.checked, false)
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout {
|
|
||||||
spacing: 16
|
|
||||||
|
|
||||||
MyToggleButton {
|
|
||||||
id: steamvrMultipleDriverToggle
|
|
||||||
Layout.preferredWidth: 400
|
|
||||||
text: "Allow Multiple Drivers"
|
|
||||||
onCheckedChanged: {
|
|
||||||
SteamVRTabController.setMultipleDriver(this.checked, false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MyText {
|
MyText {
|
||||||
Layout.preferredWidth: 20
|
Layout.preferredWidth: 20
|
||||||
text: " "
|
text: " "
|
||||||
}
|
}
|
||||||
|
|
||||||
MyToggleButton {
|
MyToggleButton {
|
||||||
id: steamvrNoFadeToGridToggle
|
id: steamvrNoFadeToGridToggle
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -79,6 +65,31 @@ GroupBox {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RowLayout {
|
||||||
|
spacing: 16
|
||||||
|
|
||||||
|
MyToggleButton {
|
||||||
|
id: steamvrMultipleDriverToggle
|
||||||
|
Layout.preferredWidth: 300
|
||||||
|
text: "Allow Multiple Drivers"
|
||||||
|
onCheckedChanged: {
|
||||||
|
SteamVRTabController.setMultipleDriver(this.checked, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MyText {
|
||||||
|
Layout.preferredWidth: 20
|
||||||
|
text: " "
|
||||||
|
}
|
||||||
|
MyToggleButton {
|
||||||
|
id: steamvrSystemButtonToggle
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: "Enable System Button Binding"
|
||||||
|
onCheckedChanged: {
|
||||||
|
SteamVRTabController.setSystemButton(this.checked, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 16
|
spacing: 16
|
||||||
@@ -86,7 +97,7 @@ GroupBox {
|
|||||||
MyToggleButton {
|
MyToggleButton {
|
||||||
id: steamvrNotificationToggle
|
id: steamvrNotificationToggle
|
||||||
text: "Disable Notifications"
|
text: "Disable Notifications"
|
||||||
Layout.preferredWidth: 400
|
Layout.preferredWidth: 300
|
||||||
onCheckedChanged: {
|
onCheckedChanged: {
|
||||||
SteamVRTabController.setDND(this.checked, false)
|
SteamVRTabController.setDND(this.checked, false)
|
||||||
}
|
}
|
||||||
@@ -95,6 +106,14 @@ GroupBox {
|
|||||||
Layout.preferredWidth: 20
|
Layout.preferredWidth: 20
|
||||||
text: " "
|
text: " "
|
||||||
}
|
}
|
||||||
|
MyToggleButton {
|
||||||
|
id: steamvrControllerPowerToggle
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: "Controller Power Turns on SteamVR"
|
||||||
|
onCheckedChanged: {
|
||||||
|
SteamVRTabController.setControllerPower(this.checked, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,6 +125,8 @@ GroupBox {
|
|||||||
steamvrMultipleDriverToggle.checked = SteamVRTabController.multipleDriver
|
steamvrMultipleDriverToggle.checked = SteamVRTabController.multipleDriver
|
||||||
steamvrNoFadeToGridToggle.checked = SteamVRTabController.noFadeToGrid
|
steamvrNoFadeToGridToggle.checked = SteamVRTabController.noFadeToGrid
|
||||||
steamvrNotificationToggle.checked = SteamVRTabController.dnd
|
steamvrNotificationToggle.checked = SteamVRTabController.dnd
|
||||||
|
steamvrControllerPowerToggle.checked = SteamVRTabController.controllerPower
|
||||||
|
steamvrNoHMDToggle.checked = SteamVRTabController.noHMD
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
@@ -125,6 +146,12 @@ GroupBox {
|
|||||||
onDNDChanged:{
|
onDNDChanged:{
|
||||||
steamvrNotificationToggle.checked = SteamVRTabController.dnd
|
steamvrNotificationToggle.checked = SteamVRTabController.dnd
|
||||||
}
|
}
|
||||||
|
onNoHMDChanged:{
|
||||||
|
steamvrNoHMDToggle.checked = SteamVRTabController.noHMD
|
||||||
|
}
|
||||||
|
onControllerPowerChanged:{
|
||||||
|
steamvrControllerPowerToggle.checked = SteamVRTabController.controllerPower
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import "media_keys"
|
|||||||
import "alarm_clock"
|
import "alarm_clock"
|
||||||
import "keyboard_utils"
|
import "keyboard_utils"
|
||||||
import "../common"
|
import "../common"
|
||||||
|
import "misc"
|
||||||
|
|
||||||
MyStackViewPage {
|
MyStackViewPage {
|
||||||
headerText: "Utilities"
|
headerText: "Utilities"
|
||||||
@@ -25,6 +26,10 @@ MyStackViewPage {
|
|||||||
id: mediaKeysGroupBox
|
id: mediaKeysGroupBox
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MiscBox{
|
||||||
|
id:utilMiscGroupBox
|
||||||
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import QtQuick 2.7
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
import ovras.advsettings 1.0
|
||||||
|
import "../../common"
|
||||||
|
|
||||||
|
GroupBox {
|
||||||
|
id: utilMiscGroupBox
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
label:
|
||||||
|
MyText {
|
||||||
|
leftPadding: 10
|
||||||
|
text: "Misc:"
|
||||||
|
bottomPadding: -10
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
color: "transparent"
|
||||||
|
border.color: "#d9dbe0"
|
||||||
|
radius: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
color: "#d9dbe0"
|
||||||
|
height: 1
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.bottomMargin: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
spacing: 16
|
||||||
|
|
||||||
|
MyToggleButton {
|
||||||
|
id: trackerOvlToggle
|
||||||
|
text: "Show Tracker Batteries"
|
||||||
|
Layout.preferredWidth: 250
|
||||||
|
onCheckedChanged: {
|
||||||
|
UtilitiesTabController.setTrackerOvlEnabled(this.checked, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
trackerOvlToggle.checked = UtilitiesTabController.trackerOvlEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: UtilitiesTabController
|
||||||
|
onTrackerOvlEnabledChanged:{
|
||||||
|
trackerOvlToggle.checked = UtilitiesTabController.trackerOvlEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -330,6 +330,11 @@ private:
|
|||||||
SettingCategory::Application,
|
SettingCategory::Application,
|
||||||
QtInfo{ "autoApplyChaperoneToggle" },
|
QtInfo{ "autoApplyChaperoneToggle" },
|
||||||
false },
|
false },
|
||||||
|
BoolSettingValue{ BoolSetting::APPLICATION_desktopModeToggle,
|
||||||
|
SettingCategory::Application,
|
||||||
|
QtInfo{ "desktopModeToggle" },
|
||||||
|
false },
|
||||||
|
|
||||||
BoolSettingValue{ BoolSetting::AUDIO_pttEnabled,
|
BoolSettingValue{ BoolSetting::AUDIO_pttEnabled,
|
||||||
SettingCategory::Audio,
|
SettingCategory::Audio,
|
||||||
QtInfo{ "pttEnabled" },
|
QtInfo{ "pttEnabled" },
|
||||||
@@ -359,6 +364,10 @@ private:
|
|||||||
SettingCategory::Utility,
|
SettingCategory::Utility,
|
||||||
QtInfo{ "vrcDebug" },
|
QtInfo{ "vrcDebug" },
|
||||||
false },
|
false },
|
||||||
|
BoolSettingValue{ BoolSetting::UTILITY_trackerOverlayEnabled,
|
||||||
|
SettingCategory::Utility,
|
||||||
|
QtInfo{ "trackerOverlayEnabled" },
|
||||||
|
true },
|
||||||
|
|
||||||
BoolSettingValue{ BoolSetting::VIDEO_brightnessEnabled,
|
BoolSettingValue{ BoolSetting::VIDEO_brightnessEnabled,
|
||||||
SettingCategory::Video,
|
SettingCategory::Video,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ enum class BoolSetting
|
|||||||
APPLICATION_crashRecoveryDisabled2,
|
APPLICATION_crashRecoveryDisabled2,
|
||||||
APPLICATION_openXRWorkAround,
|
APPLICATION_openXRWorkAround,
|
||||||
APPLICATION_autoApplyChaperone,
|
APPLICATION_autoApplyChaperone,
|
||||||
|
APPLICATION_desktopModeToggle,
|
||||||
|
|
||||||
AUDIO_pttEnabled,
|
AUDIO_pttEnabled,
|
||||||
AUDIO_pttShowNotification,
|
AUDIO_pttShowNotification,
|
||||||
@@ -45,6 +46,7 @@ enum class BoolSetting
|
|||||||
UTILITY_alarmEnabled,
|
UTILITY_alarmEnabled,
|
||||||
UTILITY_alarmIsModal,
|
UTILITY_alarmIsModal,
|
||||||
UTILITY_vrcDebug,
|
UTILITY_vrcDebug,
|
||||||
|
UTILITY_trackerOverlayEnabled,
|
||||||
|
|
||||||
VIDEO_brightnessEnabled,
|
VIDEO_brightnessEnabled,
|
||||||
VIDEO_isOverlayMethodActive,
|
VIDEO_isOverlayMethodActive,
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ void ChaperoneTabController::handleChaperoneWarnings( float distance )
|
|||||||
}
|
}
|
||||||
m_chaperoneHapticFeedbackActive = true;
|
m_chaperoneHapticFeedbackActive = true;
|
||||||
m_chaperoneHapticFeedbackThread = std::thread(
|
m_chaperoneHapticFeedbackThread = std::thread(
|
||||||
[&]( ChaperoneTabController* _this ) {
|
[&]( ChaperoneTabController* _this )
|
||||||
|
{
|
||||||
auto leftIndex
|
auto leftIndex
|
||||||
= vr::VRSystem()
|
= vr::VRSystem()
|
||||||
->GetTrackedDeviceIndexForControllerRole(
|
->GetTrackedDeviceIndexForControllerRole(
|
||||||
|
|||||||
@@ -454,23 +454,6 @@ void MoveCenterTabController::setFrictionPercent( int value, bool notify )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MoveCenterTabController::adjustChaperone() const
|
|
||||||
{
|
|
||||||
return settings::getSetting(
|
|
||||||
settings::BoolSetting::PLAYSPACE_adjustChaperone4 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::setAdjustChaperone( bool value, bool notify )
|
|
||||||
{
|
|
||||||
settings::setSetting( settings::BoolSetting::PLAYSPACE_adjustChaperone4,
|
|
||||||
value );
|
|
||||||
|
|
||||||
if ( notify )
|
|
||||||
{
|
|
||||||
emit adjustChaperoneChanged( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MoveCenterTabController::moveShortcutRight() const
|
bool MoveCenterTabController::moveShortcutRight() const
|
||||||
{
|
{
|
||||||
return settings::getSetting(
|
return settings::getSetting(
|
||||||
@@ -855,29 +838,6 @@ void MoveCenterTabController::setAllowExternalEdits( bool value, bool notify )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MoveCenterTabController::oldStyleMotion() const
|
|
||||||
{
|
|
||||||
return settings::getSetting(
|
|
||||||
settings::BoolSetting::PLAYSPACE_oldStyleMotion );
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::setOldStyleMotion( bool value, bool notify )
|
|
||||||
{
|
|
||||||
// detect incoming change to old style, and hide working set
|
|
||||||
if ( value && !oldStyleMotion() )
|
|
||||||
{
|
|
||||||
vr::VRChaperoneSetup()->HideWorkingSetPreview();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings::setSetting( settings::BoolSetting::PLAYSPACE_oldStyleMotion,
|
|
||||||
value );
|
|
||||||
|
|
||||||
if ( notify )
|
|
||||||
{
|
|
||||||
emit oldStyleMotionChanged( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MoveCenterTabController::universeCenteredRotation() const
|
bool MoveCenterTabController::universeCenteredRotation() const
|
||||||
{
|
{
|
||||||
return settings::getSetting(
|
return settings::getSetting(
|
||||||
@@ -901,23 +861,6 @@ bool MoveCenterTabController::isInitComplete() const
|
|||||||
return m_initComplete;
|
return m_initComplete;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MoveCenterTabController::simpleRecenter() const
|
|
||||||
{
|
|
||||||
return settings::getSetting(
|
|
||||||
settings::BoolSetting::PLAYSPACE_simpleRecenter );
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::setSimpleRecenter( bool value, bool notify )
|
|
||||||
{
|
|
||||||
settings::setSetting( settings::BoolSetting::PLAYSPACE_simpleRecenter,
|
|
||||||
value );
|
|
||||||
|
|
||||||
if ( notify )
|
|
||||||
{
|
|
||||||
emit simpleRecenterChanged( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::modOffsetX( float value, bool notify )
|
void MoveCenterTabController::modOffsetX( float value, bool notify )
|
||||||
{
|
{
|
||||||
if ( !lockXToggle() )
|
if ( !lockXToggle() )
|
||||||
@@ -956,8 +899,7 @@ void MoveCenterTabController::modOffsetZ( float value, bool notify )
|
|||||||
|
|
||||||
void MoveCenterTabController::shutdown()
|
void MoveCenterTabController::shutdown()
|
||||||
{
|
{
|
||||||
reset();
|
vr::VRChaperoneSetup()->RevertWorkingCopy();
|
||||||
vr::VRChaperoneSetup()->HideWorkingSetPreview();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCenterTabController::incomingSeatedReset()
|
void MoveCenterTabController::incomingSeatedReset()
|
||||||
@@ -965,15 +907,18 @@ void MoveCenterTabController::incomingSeatedReset()
|
|||||||
// if we didn't send the request from OVRAS, we need to send another
|
// if we didn't send the request from OVRAS, we need to send another
|
||||||
// ResetSeatedZeroPose(). It seems that only after this is sent from
|
// ResetSeatedZeroPose(). It seems that only after this is sent from
|
||||||
// OVRAS does ReloadFromDisk return valid info on WMR.
|
// OVRAS does ReloadFromDisk return valid info on WMR.
|
||||||
if ( !m_selfRequestedSeatedRecenter && !simpleRecenter() )
|
if ( !m_selfRequestedSeatedRecenter )
|
||||||
{
|
{
|
||||||
|
LOG( INFO ) << "steamvr center?";
|
||||||
m_selfRequestedSeatedRecenter = true;
|
m_selfRequestedSeatedRecenter = true;
|
||||||
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
|
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
LOG( INFO ) << "not our receneter";
|
||||||
updateSeatedResetData();
|
updateSeatedResetData();
|
||||||
}
|
}
|
||||||
|
// vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCenterTabController::reset()
|
void MoveCenterTabController::reset()
|
||||||
@@ -1117,94 +1062,64 @@ void MoveCenterTabController::zeroOffsets()
|
|||||||
LOG( INFO ) << "-Resetting offsets-";
|
LOG( INFO ) << "-Resetting offsets-";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m_oldOffsetX = 0.0f;
|
||||||
// finished checking if out of bounds, proceed with normal zeroing
|
m_oldOffsetY = 0.0f;
|
||||||
// offsets
|
m_oldOffsetZ = 0.0f;
|
||||||
auto chaperoneState = vr::VRChaperone()->GetCalibrationState();
|
m_oldRotation = 0;
|
||||||
if ( chaperoneState < vr::ChaperoneCalibrationState_Error
|
m_offsetX = 0.0f;
|
||||||
|| chaperoneState
|
m_offsetY = 0.0f;
|
||||||
== vr::ChaperoneCalibrationState_Error_PlayAreaInvalid
|
m_offsetZ = 0.0f;
|
||||||
|| m_ignoreChaperoneState )
|
m_rotation = 0;
|
||||||
|
emit offsetXChanged( m_offsetX );
|
||||||
|
emit offsetYChanged( m_offsetY );
|
||||||
|
emit offsetZChanged( m_offsetZ );
|
||||||
|
emit rotationChanged( m_rotation );
|
||||||
|
updateChaperoneResetData();
|
||||||
|
m_pendingZeroOffsets = false;
|
||||||
|
if ( !m_chaperoneBasisAcquired )
|
||||||
{
|
{
|
||||||
if ( !m_chaperoneInit )
|
m_chaperoneBasisAcquired = true;
|
||||||
|
if ( !m_initComplete )
|
||||||
{
|
{
|
||||||
m_chaperoneInit = true;
|
setTrackingUniverse( vr::VRCompositor()->GetTrackingSpace() );
|
||||||
LOG( INFO ) << "Chaperone Initially Calibrated";
|
if ( parent->isPreviousShutdownSafe() )
|
||||||
}
|
|
||||||
if ( chaperoneState > vr::ChaperoneCalibrationState_OK )
|
|
||||||
{
|
|
||||||
LOG( WARNING )
|
|
||||||
<< "Chaperone Cal State Is warning during zero offsets: "
|
|
||||||
<< chaperoneState;
|
|
||||||
}
|
|
||||||
m_oldOffsetX = 0.0f;
|
|
||||||
m_oldOffsetY = 0.0f;
|
|
||||||
m_oldOffsetZ = 0.0f;
|
|
||||||
m_oldRotation = 0;
|
|
||||||
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 );
|
|
||||||
updateChaperoneResetData();
|
|
||||||
m_pendingZeroOffsets = false;
|
|
||||||
if ( !m_chaperoneBasisAcquired )
|
|
||||||
{
|
|
||||||
m_chaperoneBasisAcquired = true;
|
|
||||||
if ( !m_initComplete )
|
|
||||||
{
|
{
|
||||||
setTrackingUniverse( vr::VRCompositor()->GetTrackingSpace() );
|
// all init complete, safe to autosave chaperone profile
|
||||||
if ( parent->isPreviousShutdownSafe() )
|
parent->m_chaperoneTabController.createNewAutosaveProfile();
|
||||||
{
|
m_initComplete = true;
|
||||||
// all init complete, safe to autosave chaperone profile
|
|
||||||
parent->m_chaperoneTabController.createNewAutosaveProfile();
|
|
||||||
m_initComplete = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// shutdown was unsafe last session!
|
|
||||||
LOG( WARNING )
|
|
||||||
<< "DETECTED UNSAFE SHUTDOWN FROM LAST SESSION";
|
|
||||||
m_initComplete = true;
|
|
||||||
if ( !parent->crashRecoveryDisabled() )
|
|
||||||
{
|
|
||||||
parent->m_chaperoneTabController
|
|
||||||
.applyAutosavedProfile();
|
|
||||||
LOG( INFO ) << "Applying last good chaperone "
|
|
||||||
"profile autosave";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Now mark previous shutdown as unsafe in case we crash
|
|
||||||
// some time during this session. Previous shutdown will be
|
|
||||||
// marked as being safe once more just before our app shuts
|
|
||||||
// down properly.
|
|
||||||
parent->setPreviousShutdownSafe( false );
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// shutdown was unsafe last session!
|
||||||
|
LOG( WARNING ) << "DETECTED UNSAFE SHUTDOWN FROM LAST SESSION";
|
||||||
|
m_initComplete = true;
|
||||||
|
if ( !parent->crashRecoveryDisabled() )
|
||||||
|
{
|
||||||
|
parent->m_chaperoneTabController.applyAutosavedProfile();
|
||||||
|
LOG( INFO ) << "Applying last good chaperone "
|
||||||
|
"profile autosave";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Now mark previous shutdown as unsafe in case we crash
|
||||||
|
// some time during this session. Previous shutdown will be
|
||||||
|
// marked as being safe once more just before our app shuts
|
||||||
|
// down properly.
|
||||||
|
parent->setPreviousShutdownSafe( false );
|
||||||
}
|
}
|
||||||
if ( m_roomSetupModeDetected )
|
|
||||||
{
|
|
||||||
LOG( INFO ) << "room setup EXIT detected";
|
|
||||||
m_roomSetupModeDetected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG( INFO ) << "SUCCESS: Chaperone Data Updated and Offsets zeroed out";
|
|
||||||
}
|
}
|
||||||
else
|
if ( m_roomSetupModeDetected )
|
||||||
{
|
{
|
||||||
if ( !m_pendingZeroOffsets )
|
LOG( INFO ) << "room setup EXIT detected";
|
||||||
{
|
m_roomSetupModeDetected = false;
|
||||||
LOG( INFO ) << "PENDING: Chaperone Data Update and Offsets zeroing";
|
|
||||||
}
|
|
||||||
m_pendingZeroOffsets = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG( INFO ) << "SUCCESS: Chaperone Data Updated and Offsets zeroed out";
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCenterTabController::sendSeatedRecenter()
|
void MoveCenterTabController::sendSeatedRecenter()
|
||||||
{
|
{
|
||||||
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
|
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
|
||||||
|
// vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseStanding );
|
||||||
}
|
}
|
||||||
|
|
||||||
double MoveCenterTabController::getHmdYawTotal()
|
double MoveCenterTabController::getHmdYawTotal()
|
||||||
@@ -1235,14 +1150,11 @@ void MoveCenterTabController::updateSeatedResetData()
|
|||||||
{
|
{
|
||||||
m_heightToggle = false;
|
m_heightToggle = false;
|
||||||
emit heightToggleChanged( m_heightToggle );
|
emit heightToggleChanged( m_heightToggle );
|
||||||
m_oldOffsetX = 0.0f;
|
|
||||||
m_oldOffsetY = 0.0f;
|
m_oldOffsetX = m_oldOffsetY = m_oldOffsetZ = 0.0f;
|
||||||
m_oldOffsetZ = 0.0f;
|
m_oldRotation = m_rotation = 0;
|
||||||
m_oldRotation = 0;
|
m_offsetX = m_offsetY = m_offsetZ = 0.0f;
|
||||||
m_offsetX = 0.0f;
|
|
||||||
m_offsetY = 0.0f;
|
|
||||||
m_offsetZ = 0.0f;
|
|
||||||
m_rotation = 0;
|
|
||||||
emit offsetXChanged( m_offsetX );
|
emit offsetXChanged( m_offsetX );
|
||||||
emit offsetYChanged( m_offsetY );
|
emit offsetYChanged( m_offsetY );
|
||||||
emit offsetZChanged( m_offsetZ );
|
emit offsetZChanged( m_offsetZ );
|
||||||
@@ -2135,24 +2047,6 @@ void MoveCenterTabController::zAxisLockToggle( bool zAxisLockToggleJustPressed )
|
|||||||
|
|
||||||
// END of other bindings
|
// END of other bindings
|
||||||
|
|
||||||
void MoveCenterTabController::saveUncommittedChaperone()
|
|
||||||
{
|
|
||||||
if ( !m_chaperoneCommitted )
|
|
||||||
{
|
|
||||||
vr::VRChaperoneSetup()->CommitWorkingCopy(
|
|
||||||
vr::EChaperoneConfigFile_Live );
|
|
||||||
vr::VRChaperoneSetup()->HideWorkingSetPreview();
|
|
||||||
m_chaperoneCommitted = true;
|
|
||||||
unsigned checkQuadCount = 0;
|
|
||||||
vr::VRChaperoneSetup()->GetWorkingCollisionBoundsInfo(
|
|
||||||
nullptr, &checkQuadCount );
|
|
||||||
if ( checkQuadCount > 0 )
|
|
||||||
{
|
|
||||||
parent->chaperoneUtils().loadChaperoneData( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE this function will create bad output if User Rotates 180 Degrees in
|
// NOTE this function will create bad output if User Rotates 180 Degrees in
|
||||||
// 1/7* frame-rate. (Worst Case 30 fps = ~770 deg/s)
|
// 1/7* frame-rate. (Worst Case 30 fps = ~770 deg/s)
|
||||||
void MoveCenterTabController::updateHmdRotationCounter(
|
void MoveCenterTabController::updateHmdRotationCounter(
|
||||||
@@ -2268,6 +2162,7 @@ void MoveCenterTabController::updateHandDrag(
|
|||||||
}
|
}
|
||||||
|
|
||||||
vr::TrackedDevicePose_t* movePose;
|
vr::TrackedDevicePose_t* movePose;
|
||||||
|
movePose = devicePoses + moveHandId;
|
||||||
if ( m_seatedModeDetected )
|
if ( m_seatedModeDetected )
|
||||||
{
|
{
|
||||||
vr::TrackedDevicePose_t
|
vr::TrackedDevicePose_t
|
||||||
@@ -2279,10 +2174,6 @@ void MoveCenterTabController::updateHandDrag(
|
|||||||
vr::k_unMaxTrackedDeviceCount );
|
vr::k_unMaxTrackedDeviceCount );
|
||||||
movePose = seatedDevicePoses + moveHandId;
|
movePose = seatedDevicePoses + moveHandId;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
movePose = devicePoses + moveHandId;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !movePose->bPoseIsValid || !movePose->bDeviceIsConnected
|
if ( !movePose->bPoseIsValid || !movePose->bDeviceIsConnected
|
||||||
|| movePose->eTrackingResult != vr::TrackingResult_Running_OK )
|
|| movePose->eTrackingResult != vr::TrackingResult_Running_OK )
|
||||||
@@ -2596,16 +2487,19 @@ void MoveCenterTabController::updateGravity()
|
|||||||
void MoveCenterTabController::updateSpace( bool forceUpdate )
|
void MoveCenterTabController::updateSpace( bool forceUpdate )
|
||||||
{
|
{
|
||||||
// Do nothing if all offsets and rotation are still the same...
|
// Do nothing if all offsets and rotation are still the same...
|
||||||
if ( m_offsetX == m_oldOffsetX && m_offsetY == m_oldOffsetY
|
if ( ( abs( m_offsetX - m_oldOffsetX ) + abs( m_offsetY - m_oldOffsetY )
|
||||||
&& m_offsetZ == m_oldOffsetZ && m_rotation == m_oldRotation
|
+ abs( m_offsetZ - m_oldOffsetZ ) )
|
||||||
&& !forceUpdate )
|
== 0
|
||||||
|
&& m_rotation == m_oldRotation && !forceUpdate )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reload from disk if we're at zero offsets and allow external edits
|
// reload from disk if we're at zero offsets and allow external edits
|
||||||
if ( allowExternalEdits() && m_oldOffsetX == 0.0f && m_oldOffsetY == 0.0f
|
if ( allowExternalEdits()
|
||||||
&& m_oldOffsetZ == 0.0f && m_oldRotation == 0 )
|
&& ( abs( m_oldOffsetX ) + abs( m_oldOffsetY ) + abs( m_oldOffsetZ )
|
||||||
|
+ abs( static_cast<float>( m_oldRotation ) ) )
|
||||||
|
== 0 )
|
||||||
{
|
{
|
||||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||||
vr::VRChaperoneSetup()->CommitWorkingCopy(
|
vr::VRChaperoneSetup()->CommitWorkingCopy(
|
||||||
@@ -2767,77 +2661,6 @@ void MoveCenterTabController::updateSpace( bool forceUpdate )
|
|||||||
&offsetSeatedCenter );
|
&offsetSeatedCenter );
|
||||||
}
|
}
|
||||||
|
|
||||||
// As of SVR 1.13.1 The Chaperone will follow Universe Center NOT raw
|
|
||||||
// Center as such this should be off by defualt.
|
|
||||||
// As of SVR 1.26.3 The chaperone seems to Have reverted back to pre 1.13.1
|
|
||||||
// behavior
|
|
||||||
// as of SVR 1.26.3 instead of 2x offset we have 1x offset and universe
|
|
||||||
// centerS
|
|
||||||
// as of SVR 1.26.4 1.26.3 changes are reverted as Such Adjust Chaperone
|
|
||||||
// Should Not Be Needed We Will leave in Adjust Chaperone at this point but
|
|
||||||
// make sure it defaults to off
|
|
||||||
|
|
||||||
if ( adjustChaperone() )
|
|
||||||
{
|
|
||||||
// outputLogPoses();
|
|
||||||
// make a copy of our bounds and
|
|
||||||
// reorient relative to new universe center
|
|
||||||
|
|
||||||
vr::HmdQuad_t* updatedBounds
|
|
||||||
= new vr::HmdQuad_t[m_collisionBoundsCountForReset];
|
|
||||||
|
|
||||||
// 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 the corner's xyz coordinates
|
|
||||||
updatedBounds[quad].vCorners[corner].v[0]
|
|
||||||
= m_collisionBoundsForOffset[quad].vCorners[corner].v[0];
|
|
||||||
|
|
||||||
updatedBounds[quad].vCorners[corner].v[1]
|
|
||||||
= m_collisionBoundsForOffset[quad].vCorners[corner].v[1];
|
|
||||||
|
|
||||||
updatedBounds[quad].vCorners[corner].v[2]
|
|
||||||
= m_collisionBoundsForOffset[quad].vCorners[corner].v[2];
|
|
||||||
|
|
||||||
// cancel universe center's xyz offsets to each corner's
|
|
||||||
// position and shift over by original center position so
|
|
||||||
// that we are mirroring the offset as reflected about the
|
|
||||||
// original origin
|
|
||||||
updatedBounds[quad].vCorners[corner].v[0]
|
|
||||||
-= offsetUniverseCenter.m[0][3]
|
|
||||||
// - offsetUniverseCenter.m[0][3];
|
|
||||||
- m_universeCenterForReset.m[0][3];
|
|
||||||
// but don't touch y=0 values to keep floor corners
|
|
||||||
// rooted down
|
|
||||||
|
|
||||||
if ( updatedBounds[quad].vCorners[corner].v[1] != 0 )
|
|
||||||
{
|
|
||||||
updatedBounds[quad].vCorners[corner].v[1]
|
|
||||||
-= offsetUniverseCenter.m[1][3]
|
|
||||||
//- offsetUniverseCenter.m[1][3];
|
|
||||||
- m_universeCenterForReset.m[1][3];
|
|
||||||
}
|
|
||||||
updatedBounds[quad].vCorners[corner].v[2]
|
|
||||||
-= offsetUniverseCenter.m[2][3]
|
|
||||||
// - offsetUniverseCenter.m[2][3];
|
|
||||||
- m_universeCenterForReset.m[2][3];
|
|
||||||
|
|
||||||
// rotate by universe center's yaw
|
|
||||||
rotateFloatCoordinates(
|
|
||||||
updatedBounds[quad].vCorners[corner].v,
|
|
||||||
static_cast<float>( offsetUniverseCenterYaw ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// update chaperone working set preview (this does not commit)
|
|
||||||
vr::VRChaperoneSetup()->SetWorkingCollisionBoundsInfo(
|
|
||||||
updatedBounds, m_collisionBoundsCountForReset );
|
|
||||||
delete[] updatedBounds;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Center Marker for playspace.
|
// Center Marker for playspace.
|
||||||
if ( parent->m_chaperoneTabController.m_centerMarkerOverlayNeedsUpdate )
|
if ( parent->m_chaperoneTabController.m_centerMarkerOverlayNeedsUpdate )
|
||||||
{
|
{
|
||||||
@@ -2885,66 +2708,8 @@ void MoveCenterTabController::updateSpace( bool forceUpdate )
|
|||||||
vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(
|
vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(
|
||||||
&offsetUniverseCenter );
|
&offsetUniverseCenter );
|
||||||
|
|
||||||
if ( oldStyleMotion() )
|
vr::VRChaperoneSetup()->ShowWorkingSetPreview();
|
||||||
{
|
|
||||||
// check if universe center is outside of OpenVR commit bounds (1km)
|
|
||||||
if ( abs( offsetUniverseCenterXyz[0] ) > k_maxOpenvrCommitOffset )
|
|
||||||
{
|
|
||||||
LOG( INFO ) << "COMMIT FAILED: Raw universe center out of commit "
|
|
||||||
"bounds ( X: "
|
|
||||||
<< offsetUniverseCenterXyz[0] << " )";
|
|
||||||
vr::HmdMatrix34_t standingZero;
|
|
||||||
vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose(
|
|
||||||
&standingZero );
|
|
||||||
LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose";
|
|
||||||
outputLogHmdMatrix( standingZero );
|
|
||||||
reset();
|
|
||||||
parent->m_chaperoneTabController.applyAutosavedProfile();
|
|
||||||
LOG( INFO ) << "-Resetting to autosaved chaperone profile-";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( abs( offsetUniverseCenterXyz[1] ) > k_maxOpenvrCommitOffset )
|
|
||||||
{
|
|
||||||
LOG( INFO ) << "COMMIT FAILED: Raw universe center out of commit "
|
|
||||||
"bounds ( Y: "
|
|
||||||
<< offsetUniverseCenterXyz[1] << " )";
|
|
||||||
vr::HmdMatrix34_t standingZero;
|
|
||||||
vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose(
|
|
||||||
&standingZero );
|
|
||||||
LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose";
|
|
||||||
outputLogHmdMatrix( standingZero );
|
|
||||||
reset();
|
|
||||||
parent->m_chaperoneTabController.applyAutosavedProfile();
|
|
||||||
LOG( INFO ) << "-Resetting to autosaved chaperone profile-";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( abs( offsetUniverseCenterXyz[2] ) > k_maxOpenvrCommitOffset )
|
|
||||||
{
|
|
||||||
LOG( INFO ) << "COMMIT FAILED: Raw universe center out of commit "
|
|
||||||
"bounds ( Z: "
|
|
||||||
<< offsetUniverseCenterXyz[2] << " )";
|
|
||||||
vr::HmdMatrix34_t standingZero;
|
|
||||||
vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose(
|
|
||||||
&standingZero );
|
|
||||||
LOG( INFO ) << "GetWorkingStandingZeroPoseToRawTrackingPose";
|
|
||||||
outputLogHmdMatrix( standingZero );
|
|
||||||
reset();
|
|
||||||
parent->m_chaperoneTabController.applyAutosavedProfile();
|
|
||||||
LOG( INFO ) << "-Resetting to autosaved chaperone profile-";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
vr::VRChaperoneSetup()->CommitWorkingCopy(
|
|
||||||
vr::EChaperoneConfigFile_Live );
|
|
||||||
m_chaperoneCommitted = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vr::VRChaperoneSetup()->ShowWorkingSetPreview();
|
|
||||||
m_chaperoneCommitted = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// loadChaperoneData( false ), false so that we don't load live data,
|
|
||||||
// and reference the working set instead.
|
|
||||||
if ( m_collisionBoundsCountForReset > 0 )
|
if ( m_collisionBoundsCountForReset > 0 )
|
||||||
{
|
{
|
||||||
parent->chaperoneUtils().loadChaperoneData( false );
|
parent->chaperoneUtils().loadChaperoneData( false );
|
||||||
@@ -3111,10 +2876,4 @@ void MoveCenterTabController::eventLoopTick(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCenterTabController::setIgnoreChaperoneState()
|
|
||||||
{
|
|
||||||
m_ignoreChaperoneState = true;
|
|
||||||
LOG( INFO ) << "Ignoring Chaperone State for Zero Offsets";
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace advsettings
|
} // namespace advsettings
|
||||||
|
|||||||
@@ -89,8 +89,6 @@ class MoveCenterTabController : public QObject
|
|||||||
NOTIFY smoothTurnRateChanged )
|
NOTIFY smoothTurnRateChanged )
|
||||||
Q_PROPERTY( int frictionPercent READ frictionPercent WRITE
|
Q_PROPERTY( int frictionPercent READ frictionPercent WRITE
|
||||||
setFrictionPercent NOTIFY frictionPercentChanged )
|
setFrictionPercent NOTIFY frictionPercentChanged )
|
||||||
Q_PROPERTY( bool adjustChaperone READ adjustChaperone WRITE
|
|
||||||
setAdjustChaperone NOTIFY adjustChaperoneChanged )
|
|
||||||
Q_PROPERTY( bool moveShortcutRight READ moveShortcutRight WRITE
|
Q_PROPERTY( bool moveShortcutRight READ moveShortcutRight WRITE
|
||||||
setMoveShortcutRight NOTIFY moveShortcutRightChanged )
|
setMoveShortcutRight NOTIFY moveShortcutRightChanged )
|
||||||
Q_PROPERTY( bool moveShortcutLeft READ moveShortcutLeft WRITE
|
Q_PROPERTY( bool moveShortcutLeft READ moveShortcutLeft WRITE
|
||||||
@@ -130,13 +128,9 @@ class MoveCenterTabController : public QObject
|
|||||||
setShowLogMatricesButton NOTIFY showLogMatricesButtonChanged )
|
setShowLogMatricesButton NOTIFY showLogMatricesButtonChanged )
|
||||||
Q_PROPERTY( bool allowExternalEdits READ allowExternalEdits WRITE
|
Q_PROPERTY( bool allowExternalEdits READ allowExternalEdits WRITE
|
||||||
setAllowExternalEdits NOTIFY allowExternalEditsChanged )
|
setAllowExternalEdits NOTIFY allowExternalEditsChanged )
|
||||||
Q_PROPERTY( bool oldStyleMotion READ oldStyleMotion WRITE setOldStyleMotion
|
|
||||||
NOTIFY oldStyleMotionChanged )
|
|
||||||
Q_PROPERTY(
|
Q_PROPERTY(
|
||||||
bool universeCenteredRotation READ universeCenteredRotation WRITE
|
bool universeCenteredRotation READ universeCenteredRotation WRITE
|
||||||
setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged )
|
setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged )
|
||||||
Q_PROPERTY( bool simpleRecenter READ simpleRecenter WRITE setSimpleRecenter
|
|
||||||
NOTIFY simpleRecenterChanged )
|
|
||||||
Q_PROPERTY(
|
Q_PROPERTY(
|
||||||
float dragMult READ dragMult WRITE setDragMult NOTIFY dragMultChanged )
|
float dragMult READ dragMult WRITE setDragMult NOTIFY dragMultChanged )
|
||||||
|
|
||||||
@@ -195,7 +189,6 @@ private:
|
|||||||
bool m_swapDragToRightHandActivated = false;
|
bool m_swapDragToRightHandActivated = false;
|
||||||
bool m_gravityActive = false;
|
bool m_gravityActive = false;
|
||||||
bool m_gravityReversed = false;
|
bool m_gravityReversed = false;
|
||||||
bool m_chaperoneCommitted = true;
|
|
||||||
bool m_pendingZeroOffsets = true;
|
bool m_pendingZeroOffsets = true;
|
||||||
bool m_pendingSeatedRecenter = false;
|
bool m_pendingSeatedRecenter = false;
|
||||||
bool m_selfRequestedSeatedRecenter = false;
|
bool m_selfRequestedSeatedRecenter = false;
|
||||||
@@ -207,8 +200,6 @@ private:
|
|||||||
unsigned m_dragComfortFrameSkipCounter = 0;
|
unsigned m_dragComfortFrameSkipCounter = 0;
|
||||||
unsigned m_turnComfortFrameSkipCounter = 0;
|
unsigned m_turnComfortFrameSkipCounter = 0;
|
||||||
|
|
||||||
bool m_chaperoneInit = true;
|
|
||||||
|
|
||||||
// Matrix used For Center Marker
|
// Matrix used For Center Marker
|
||||||
vr::HmdMatrix34_t m_offsetmatrix = utils::k_forwardUpMatrix;
|
vr::HmdMatrix34_t m_offsetmatrix = utils::k_forwardUpMatrix;
|
||||||
|
|
||||||
@@ -236,7 +227,7 @@ private:
|
|||||||
void updateSpace( bool forceUpdate = false );
|
void updateSpace( bool forceUpdate = false );
|
||||||
void clampVelocity( double* velocity );
|
void clampVelocity( double* velocity );
|
||||||
void applyChaperoneResetData();
|
void applyChaperoneResetData();
|
||||||
void saveUncommittedChaperone();
|
// void saveUncommittedChaperone();
|
||||||
void outputLogHmdMatrix( vr::HmdMatrix34_t hmdMatrix );
|
void outputLogHmdMatrix( vr::HmdMatrix34_t hmdMatrix );
|
||||||
|
|
||||||
std::vector<OffsetProfile> m_offsetProfiles;
|
std::vector<OffsetProfile> m_offsetProfiles;
|
||||||
@@ -256,7 +247,6 @@ public:
|
|||||||
int snapTurnAngle() const;
|
int snapTurnAngle() const;
|
||||||
int smoothTurnRate() const;
|
int smoothTurnRate() const;
|
||||||
int frictionPercent() const;
|
int frictionPercent() const;
|
||||||
bool adjustChaperone() const;
|
|
||||||
bool moveShortcutRight() const;
|
bool moveShortcutRight() const;
|
||||||
bool moveShortcutLeft() const;
|
bool moveShortcutLeft() const;
|
||||||
bool turnBindRight() const;
|
bool turnBindRight() const;
|
||||||
@@ -277,9 +267,7 @@ public:
|
|||||||
bool lockZToggle() const;
|
bool lockZToggle() const;
|
||||||
bool showLogMatricesButton() const;
|
bool showLogMatricesButton() const;
|
||||||
bool allowExternalEdits() const;
|
bool allowExternalEdits() const;
|
||||||
bool oldStyleMotion() const;
|
|
||||||
bool universeCenteredRotation() const;
|
bool universeCenteredRotation() const;
|
||||||
bool simpleRecenter() const;
|
|
||||||
bool isInitComplete() const;
|
bool isInitComplete() const;
|
||||||
double getHmdYawTotal();
|
double getHmdYawTotal();
|
||||||
void resetHmdYawTotal();
|
void resetHmdYawTotal();
|
||||||
@@ -293,7 +281,7 @@ public:
|
|||||||
void saveOffsetProfiles();
|
void saveOffsetProfiles();
|
||||||
Q_INVOKABLE unsigned getOffsetProfileCount();
|
Q_INVOKABLE unsigned getOffsetProfileCount();
|
||||||
Q_INVOKABLE QString getOffsetProfileName( unsigned index );
|
Q_INVOKABLE QString getOffsetProfileName( unsigned index );
|
||||||
Q_INVOKABLE void setIgnoreChaperoneState();
|
// Q_INVOKABLE void setIgnoreChaperoneState();
|
||||||
|
|
||||||
// actions:
|
// actions:
|
||||||
void leftHandSpaceDrag( bool leftHandDragActive );
|
void leftHandSpaceDrag( bool leftHandDragActive );
|
||||||
@@ -333,7 +321,6 @@ public slots:
|
|||||||
void setSmoothTurnRate( int value, bool notify = true );
|
void setSmoothTurnRate( int value, bool notify = true );
|
||||||
void setFrictionPercent( int value, bool notify = true );
|
void setFrictionPercent( int value, bool notify = true );
|
||||||
|
|
||||||
void setAdjustChaperone( bool value, bool notify = true );
|
|
||||||
void setMoveShortcutRight( bool value, bool notify = true );
|
void setMoveShortcutRight( bool value, bool notify = true );
|
||||||
void setMoveShortcutLeft( bool value, bool notify = true );
|
void setMoveShortcutLeft( bool value, bool notify = true );
|
||||||
void setTurnBindRight( bool value, bool notify = true );
|
void setTurnBindRight( bool value, bool notify = true );
|
||||||
@@ -359,9 +346,7 @@ public slots:
|
|||||||
void setLockZ( bool value, bool notify = true );
|
void setLockZ( bool value, bool notify = true );
|
||||||
void setShowLogMatricesButton( bool value, bool notify = true );
|
void setShowLogMatricesButton( bool value, bool notify = true );
|
||||||
void setAllowExternalEdits( bool value, bool notify = true );
|
void setAllowExternalEdits( bool value, bool notify = true );
|
||||||
void setOldStyleMotion( bool value, bool notify = true );
|
|
||||||
void setUniverseCenteredRotation( bool value, bool notify = true );
|
void setUniverseCenteredRotation( bool value, bool notify = true );
|
||||||
void setSimpleRecenter( bool value, bool notify = true );
|
|
||||||
|
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void reset();
|
void reset();
|
||||||
@@ -384,7 +369,6 @@ signals:
|
|||||||
void snapTurnAngleChanged( int value );
|
void snapTurnAngleChanged( int value );
|
||||||
void smoothTurnRateChanged( int value );
|
void smoothTurnRateChanged( int value );
|
||||||
void frictionPercentChanged( int value );
|
void frictionPercentChanged( int value );
|
||||||
void adjustChaperoneChanged( bool value );
|
|
||||||
void moveShortcutRightChanged( bool value );
|
void moveShortcutRightChanged( bool value );
|
||||||
void moveShortcutLeftChanged( bool value );
|
void moveShortcutLeftChanged( bool value );
|
||||||
void turnBindRightChanged( bool value );
|
void turnBindRightChanged( bool value );
|
||||||
@@ -405,10 +389,7 @@ signals:
|
|||||||
void requireLockZChanged( bool value );
|
void requireLockZChanged( bool value );
|
||||||
void showLogMatricesButtonChanged( bool value );
|
void showLogMatricesButtonChanged( bool value );
|
||||||
void allowExternalEditsChanged( bool value );
|
void allowExternalEditsChanged( bool value );
|
||||||
void oldStyleMotionChanged( bool value );
|
|
||||||
void universeCenteredRotationChanged( bool value );
|
void universeCenteredRotationChanged( bool value );
|
||||||
void simpleRecenterChanged( bool value );
|
|
||||||
|
|
||||||
void offsetProfilesUpdated();
|
void offsetProfilesUpdated();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include <QQuickWindow>
|
#include <QQuickWindow>
|
||||||
#include "../overlaycontroller.h"
|
#include "../overlaycontroller.h"
|
||||||
#include "../utils/update_rate.h"
|
#include "../utils/update_rate.h"
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
QT_USE_NAMESPACE
|
QT_USE_NAMESPACE
|
||||||
|
|
||||||
@@ -40,6 +41,8 @@ void SteamVRTabController::synchSteamVR()
|
|||||||
setCameraActive( cameraActive() );
|
setCameraActive( cameraActive() );
|
||||||
setCameraCont( cameraCont() );
|
setCameraCont( cameraCont() );
|
||||||
setCameraBounds( cameraBounds() );
|
setCameraBounds( cameraBounds() );
|
||||||
|
setControllerPower( controllerPower() );
|
||||||
|
setNoHMD( noHMD() );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SteamVRTabController::performanceGraph() const
|
bool SteamVRTabController::performanceGraph() const
|
||||||
@@ -70,6 +73,33 @@ void SteamVRTabController::setPerformanceGraph( const bool value,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SteamVRTabController::noHMD() const
|
||||||
|
{
|
||||||
|
auto p = ovr_settings_wrapper::getBool(
|
||||||
|
vr::k_pch_SteamVR_Section, vr::k_pch_SteamVR_RequireHmd_String );
|
||||||
|
|
||||||
|
if ( p.first == ovr_settings_wrapper::SettingsError::NoError )
|
||||||
|
{
|
||||||
|
return p.second;
|
||||||
|
}
|
||||||
|
return m_noHMD;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SteamVRTabController::setNoHMD( const bool value, const bool notify )
|
||||||
|
{
|
||||||
|
if ( m_noHMD != value )
|
||||||
|
{
|
||||||
|
m_noHMD = value;
|
||||||
|
ovr_settings_wrapper::setBool( vr::k_pch_SteamVR_Section,
|
||||||
|
vr::k_pch_SteamVR_RequireHmd_String,
|
||||||
|
m_noHMD );
|
||||||
|
if ( notify )
|
||||||
|
{
|
||||||
|
emit noHMDChanged( m_noHMD );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool SteamVRTabController::multipleDriver() const
|
bool SteamVRTabController::multipleDriver() const
|
||||||
{
|
{
|
||||||
auto p = ovr_settings_wrapper::getBool(
|
auto p = ovr_settings_wrapper::getBool(
|
||||||
@@ -128,6 +158,35 @@ void SteamVRTabController::setNoFadeToGrid( const bool value,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SteamVRTabController::controllerPower() const
|
||||||
|
{
|
||||||
|
auto p = ovr_settings_wrapper::getBool(
|
||||||
|
vr::k_pch_Power_Section,
|
||||||
|
vr::k_pch_Power_AutoLaunchSteamVROnButtonPress );
|
||||||
|
if ( p.first == ovr_settings_wrapper::SettingsError::NoError )
|
||||||
|
{
|
||||||
|
return p.second;
|
||||||
|
}
|
||||||
|
return m_controllerPower;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SteamVRTabController::setControllerPower( const bool value,
|
||||||
|
const bool notify )
|
||||||
|
{
|
||||||
|
if ( m_controllerPower != value )
|
||||||
|
{
|
||||||
|
m_controllerPower = value;
|
||||||
|
ovr_settings_wrapper::setBool(
|
||||||
|
vr::k_pch_Power_Section,
|
||||||
|
vr::k_pch_Power_AutoLaunchSteamVROnButtonPress,
|
||||||
|
m_controllerPower );
|
||||||
|
if ( notify )
|
||||||
|
{
|
||||||
|
emit controllerPowerChanged( m_controllerPower );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool SteamVRTabController::systemButton() const
|
bool SteamVRTabController::systemButton() const
|
||||||
{
|
{
|
||||||
auto p = ovr_settings_wrapper::getBool(
|
auto p = ovr_settings_wrapper::getBool(
|
||||||
@@ -448,6 +507,12 @@ void SteamVRTabController::launchBindingUI()
|
|||||||
LOG( ERROR )
|
LOG( ERROR )
|
||||||
<< "failed to get input handle? is your right controller on?";
|
<< "failed to get input handle? is your right controller on?";
|
||||||
}
|
}
|
||||||
|
if ( parent->isDesktopMode() )
|
||||||
|
{
|
||||||
|
QDesktopServices::openUrl(
|
||||||
|
QUrl( "http://127.0.0.1:27062/dashboard/controllerbinding.html" ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
auto error = vr::VRInput()->OpenBindingUI(
|
auto error = vr::VRInput()->OpenBindingUI(
|
||||||
application_strings::applicationKey, actionHandle, inputHandle, false );
|
application_strings::applicationKey, actionHandle, inputHandle, false );
|
||||||
if ( error != vr::VRInputError_None )
|
if ( error != vr::VRInputError_None )
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ class SteamVRTabController : public QObject
|
|||||||
cameraContChanged )
|
cameraContChanged )
|
||||||
Q_PROPERTY( bool perAppBindEnabled READ perAppBindEnabled WRITE
|
Q_PROPERTY( bool perAppBindEnabled READ perAppBindEnabled WRITE
|
||||||
setPerAppBindEnabled NOTIFY perAppBindEnabledChanged )
|
setPerAppBindEnabled NOTIFY perAppBindEnabledChanged )
|
||||||
|
Q_PROPERTY( bool controllerPower READ controllerPower WRITE
|
||||||
|
setControllerPower NOTIFY controllerPowerChanged )
|
||||||
|
Q_PROPERTY( bool noHMD READ noHMD WRITE setNoHMD NOTIFY noHMDChanged )
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OverlayController* parent;
|
OverlayController* parent;
|
||||||
@@ -74,6 +77,8 @@ private:
|
|||||||
bool m_noFadeToGridToggle = false;
|
bool m_noFadeToGridToggle = false;
|
||||||
bool m_multipleDriverToggle = false;
|
bool m_multipleDriverToggle = false;
|
||||||
bool m_dnd = false;
|
bool m_dnd = false;
|
||||||
|
bool m_controllerPower = false;
|
||||||
|
bool m_noHMD = false;
|
||||||
QNetworkAccessManager m_networkManagerApply;
|
QNetworkAccessManager m_networkManagerApply;
|
||||||
QNetworkAccessManager m_networkManagerUrl;
|
QNetworkAccessManager m_networkManagerUrl;
|
||||||
QNetworkAccessManager m_networkManagerBind;
|
QNetworkAccessManager m_networkManagerBind;
|
||||||
@@ -112,6 +117,8 @@ public:
|
|||||||
bool multipleDriver() const;
|
bool multipleDriver() const;
|
||||||
bool systemButton() const;
|
bool systemButton() const;
|
||||||
bool dnd() const;
|
bool dnd() const;
|
||||||
|
bool controllerPower() const;
|
||||||
|
bool noHMD() const;
|
||||||
|
|
||||||
bool cameraActive() const;
|
bool cameraActive() const;
|
||||||
bool cameraBounds() const;
|
bool cameraBounds() const;
|
||||||
@@ -163,6 +170,8 @@ public slots:
|
|||||||
void setNoFadeToGrid( bool value, bool notify = true );
|
void setNoFadeToGrid( bool value, bool notify = true );
|
||||||
void setMultipleDriver( bool value, bool notify = true );
|
void setMultipleDriver( bool value, bool notify = true );
|
||||||
void setDND( bool value, bool notify = true );
|
void setDND( bool value, bool notify = true );
|
||||||
|
void setControllerPower( bool value, bool notify = true );
|
||||||
|
void setNoHMD( bool value, bool notify = true );
|
||||||
|
|
||||||
void setCameraActive( bool value, bool notify = true );
|
void setCameraActive( bool value, bool notify = true );
|
||||||
void setCameraBounds( bool value, bool notify = true );
|
void setCameraBounds( bool value, bool notify = true );
|
||||||
@@ -182,6 +191,8 @@ signals:
|
|||||||
void systemButtonChanged( bool value );
|
void systemButtonChanged( bool value );
|
||||||
void noFadeToGridChanged( bool value );
|
void noFadeToGridChanged( bool value );
|
||||||
void dNDChanged( bool value );
|
void dNDChanged( bool value );
|
||||||
|
void controllerPowerChanged( bool value );
|
||||||
|
void noHMDChanged( bool value );
|
||||||
|
|
||||||
void cameraActiveChanged( bool value );
|
void cameraActiveChanged( bool value );
|
||||||
void cameraBoundsChanged( bool value );
|
void cameraBoundsChanged( bool value );
|
||||||
|
|||||||
@@ -204,6 +204,26 @@ void UtilitiesTabController::setVrcDebug( bool value, bool notify )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool UtilitiesTabController::trackerOvlEnabled() const
|
||||||
|
{
|
||||||
|
return settings::getSetting(
|
||||||
|
settings::BoolSetting::UTILITY_trackerOverlayEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilitiesTabController::setTrackerOvlEnabled( bool value, bool notify )
|
||||||
|
{
|
||||||
|
settings::setSetting( settings::BoolSetting::UTILITY_trackerOverlayEnabled,
|
||||||
|
value );
|
||||||
|
if ( notify )
|
||||||
|
{
|
||||||
|
emit trackerOvlEnabledChanged( value );
|
||||||
|
}
|
||||||
|
if ( !value )
|
||||||
|
{
|
||||||
|
destroyBatteryOverlays();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString getBatteryIconPath( int batteryState )
|
QString getBatteryIconPath( int batteryState )
|
||||||
{
|
{
|
||||||
constexpr auto batteryPrefix = "/res/img/battery/battery_";
|
constexpr auto batteryPrefix = "/res/img/battery/battery_";
|
||||||
@@ -224,8 +244,9 @@ QString getBatteryIconPath( int batteryState )
|
|||||||
return QString::fromStdString( *batteryPath );
|
return QString::fromStdString( *batteryPath );
|
||||||
}
|
}
|
||||||
|
|
||||||
vr::VROverlayHandle_t createBatteryOverlay( vr::TrackedDeviceIndex_t index,
|
vr::VROverlayHandle_t UtilitiesTabController::createBatteryOverlay(
|
||||||
unsigned style = 0 )
|
vr::TrackedDeviceIndex_t index,
|
||||||
|
unsigned style )
|
||||||
{
|
{
|
||||||
vr::VROverlayHandle_t handle = vr::k_ulOverlayHandleInvalid;
|
vr::VROverlayHandle_t handle = vr::k_ulOverlayHandleInvalid;
|
||||||
std::string batteryKey = std::string( application_strings::applicationKey )
|
std::string batteryKey = std::string( application_strings::applicationKey )
|
||||||
@@ -273,14 +294,26 @@ vr::VROverlayHandle_t createBatteryOverlay( vr::TrackedDeviceIndex_t index,
|
|||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UtilitiesTabController::eventLoopTick()
|
void UtilitiesTabController::destroyBatteryOverlays()
|
||||||
{
|
{
|
||||||
if ( updateRate.shouldSubjectNotRun(
|
for ( auto& el : m_batteryOverlayHandles )
|
||||||
UpdateSubject::UtilitiesTabController ) )
|
|
||||||
{
|
{
|
||||||
return;
|
if ( el == 0 )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto err = vr::VROverlay()->DestroyOverlay( el );
|
||||||
|
el = 0;
|
||||||
|
if ( err != vr::VROverlayError_None )
|
||||||
|
{
|
||||||
|
LOG( ERROR ) << "Could not Delete Battery Overlay: "
|
||||||
|
<< vr::VROverlay()->GetOverlayErrorNameFromEnum( err );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilitiesTabController::handleTrackerBatOvl()
|
||||||
|
{
|
||||||
// attach battery overlay to all tracked devices that aren't a
|
// attach battery overlay to all tracked devices that aren't a
|
||||||
// controller or hmd
|
// controller or hmd
|
||||||
for ( vr::TrackedDeviceIndex_t i = 0; i < vr::k_unMaxTrackedDeviceCount;
|
for ( vr::TrackedDeviceIndex_t i = 0; i < vr::k_unMaxTrackedDeviceCount;
|
||||||
@@ -364,4 +397,17 @@ void UtilitiesTabController::eventLoopTick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UtilitiesTabController::eventLoopTick()
|
||||||
|
{
|
||||||
|
if ( updateRate.shouldSubjectNotRun(
|
||||||
|
UpdateSubject::UtilitiesTabController ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( trackerOvlEnabled() )
|
||||||
|
{
|
||||||
|
handleTrackerBatOvl();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace advsettings
|
} // namespace advsettings
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ class UtilitiesTabController : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(
|
Q_PROPERTY(
|
||||||
bool vrcDebug READ vrcDebug WRITE setVrcDebug NOTIFY vrcDebugChanged )
|
bool vrcDebug READ vrcDebug WRITE setVrcDebug NOTIFY vrcDebugChanged )
|
||||||
|
Q_PROPERTY( bool trackerOvlEnabled READ trackerOvlEnabled WRITE
|
||||||
|
setTrackerOvlEnabled NOTIFY trackerOvlEnabledChanged )
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OverlayController* m_parent;
|
OverlayController* m_parent;
|
||||||
@@ -31,6 +33,10 @@ private:
|
|||||||
= { 0 };
|
= { 0 };
|
||||||
int m_batteryState[vr::k_unMaxTrackedDeviceCount];
|
int m_batteryState[vr::k_unMaxTrackedDeviceCount];
|
||||||
bool m_batteryVisible[vr::k_unMaxTrackedDeviceCount];
|
bool m_batteryVisible[vr::k_unMaxTrackedDeviceCount];
|
||||||
|
void handleTrackerBatOvl();
|
||||||
|
vr::VROverlayHandle_t createBatteryOverlay( vr::TrackedDeviceIndex_t index,
|
||||||
|
unsigned style = 0 );
|
||||||
|
void destroyBatteryOverlays();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void initStage2( OverlayController* var_parent );
|
void initStage2( OverlayController* var_parent );
|
||||||
@@ -38,6 +44,7 @@ public:
|
|||||||
void eventLoopTick();
|
void eventLoopTick();
|
||||||
|
|
||||||
bool vrcDebug() const;
|
bool vrcDebug() const;
|
||||||
|
bool trackerOvlEnabled() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void sendKeyboardInput( QString input );
|
void sendKeyboardInput( QString input );
|
||||||
@@ -76,9 +83,11 @@ public slots:
|
|||||||
Q_INVOKABLE void sendKeyboardThree();
|
Q_INVOKABLE void sendKeyboardThree();
|
||||||
|
|
||||||
void setVrcDebug( bool value, bool notify = true );
|
void setVrcDebug( bool value, bool notify = true );
|
||||||
|
void setTrackerOvlEnabled( bool value, bool notify = true );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void vrcDebugChanged( bool value );
|
void vrcDebugChanged( bool value );
|
||||||
|
void trackerOvlEnabledChanged( bool value );
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace advsettings
|
} // namespace advsettings
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{ "major": 5, "minor": 5, "patch": 0, "updateMessage": "", "optionalMessage": "" }
|
{ "major": 5, "minor": 8, "patch": 3, "updateMessage": "", "optionalMessage": "" }
|
||||||
Reference in New Issue
Block a user