Make double recenter behavior default and cleanup debug code
This also adds the option "simpleRecenter" which can be set to true in the ini playspace settings to get single (non loop) recenter behavior back.
This commit is contained in:
@@ -167,6 +167,8 @@ MyStackViewPage {
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
// set visible to true here in builds when we need a debug toggle checkbox, otherwise false when on master branch.
|
||||
visible: false
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -632,7 +632,7 @@ void ChaperoneTabController::eventLoopTick(
|
||||
if ( m_updateTicksChaperoneReload >= 500 )
|
||||
{
|
||||
m_updateTicksChaperoneReload = 0;
|
||||
LOG( WARNING ) << "Attempting to Reloading Chaperone Data";
|
||||
LOG( WARNING ) << "Attempting to reload chaperone data";
|
||||
parent->chaperoneUtils().loadChaperoneData();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,6 +158,11 @@ void MoveCenterTabController::initStage1()
|
||||
{
|
||||
m_enableSeatedMotion = value.toBool();
|
||||
}
|
||||
value = settings->value( "simpleRecenter", m_simpleRecenter );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
m_simpleRecenter = value.toBool();
|
||||
}
|
||||
settings->endGroup();
|
||||
reloadOffsetProfiles();
|
||||
m_lastDragUpdateTimePoint = std::chrono::steady_clock::now();
|
||||
@@ -351,6 +356,10 @@ void MoveCenterTabController::outputLogSettings()
|
||||
{
|
||||
LOG( INFO ) << "LOADED SETTINGS: Seated Motion Enabled";
|
||||
}
|
||||
if ( m_simpleRecenter )
|
||||
{
|
||||
LOG( INFO ) << "LOADED SETTINGS: Simple Recenter Enabled";
|
||||
}
|
||||
if ( m_dragBounds )
|
||||
{
|
||||
LOG( INFO ) << "LOADED SETTINGS: Space Drag Force Bounds Enabled";
|
||||
@@ -1207,6 +1216,27 @@ void MoveCenterTabController::setEnableSeatedMotion( bool value, bool notify )
|
||||
<< m_enableSeatedMotion;
|
||||
}
|
||||
|
||||
bool MoveCenterTabController::simpleRecenter() const
|
||||
{
|
||||
return m_simpleRecenter;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setSimpleRecenter( bool value, bool notify )
|
||||
{
|
||||
m_simpleRecenter = value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup( "playspaceSettings" );
|
||||
settings->setValue( "simpleRecenter", m_simpleRecenter );
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if ( notify )
|
||||
{
|
||||
emit simpleRecenterChanged( m_simpleRecenter );
|
||||
}
|
||||
LOG( INFO ) << "CHANGED SETTINGS: Simple Recenter Set: "
|
||||
<< m_simpleRecenter;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::modOffsetX( float value, bool notify )
|
||||
{
|
||||
if ( !m_lockXToggle )
|
||||
@@ -1253,7 +1283,10 @@ void MoveCenterTabController::incomingSeatedReset()
|
||||
{
|
||||
if ( m_enableSeatedMotion )
|
||||
{
|
||||
if ( !m_selfRequestedSeatedRecenter )
|
||||
// if we didn't send the request from OVRAS, we need to send another
|
||||
// ResetSeatedZeroPose(). It seems that only after this is sent from
|
||||
// OVRAS does ReloadFromDisk return valid info on WMR.
|
||||
if ( !m_selfRequestedSeatedRecenter && !m_simpleRecenter )
|
||||
{
|
||||
m_selfRequestedSeatedRecenter = true;
|
||||
vr::VRSystem()->ResetSeatedZeroPose();
|
||||
@@ -1263,35 +1296,6 @@ void MoveCenterTabController::incomingSeatedReset()
|
||||
updateSeatedResetData();
|
||||
}
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 1 )
|
||||
{
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 2 )
|
||||
{
|
||||
std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 3 )
|
||||
{
|
||||
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 4 )
|
||||
{
|
||||
std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 5 )
|
||||
{
|
||||
std::this_thread::sleep_for( std::chrono::milliseconds( 500 ) );
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
else if ( parent->enableDebug() && parent->debugState() == 6 )
|
||||
{
|
||||
std::this_thread::sleep_for( std::chrono::milliseconds( 1000 ) );
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
}
|
||||
|
||||
void MoveCenterTabController::reset()
|
||||
@@ -1474,10 +1478,6 @@ void MoveCenterTabController::zeroOffsets()
|
||||
|
||||
void MoveCenterTabController::sendSeatedRecenter()
|
||||
{
|
||||
if ( parent->enableDebug() && parent->debugState() == 7 )
|
||||
{
|
||||
m_selfRequestedSeatedRecenter = true;
|
||||
}
|
||||
vr::VRSystem()->ResetSeatedZeroPose();
|
||||
}
|
||||
|
||||
@@ -1519,15 +1519,7 @@ void MoveCenterTabController::updateSeatedResetData()
|
||||
emit offsetYChanged( m_offsetY );
|
||||
emit offsetZChanged( m_offsetZ );
|
||||
emit rotationChanged( m_rotation );
|
||||
if ( parent->enableDebug() && parent->debugState() >= 100 )
|
||||
{
|
||||
m_lastSeatedRecenterTimePoint = std::chrono::steady_clock::now();
|
||||
m_pendingSeatedReloadFromDisk = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
}
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
|
||||
// done with this recenter, so set self request back to false for next time.
|
||||
m_selfRequestedSeatedRecenter = false;
|
||||
// set pending update here, will be processed on next instance of motion or
|
||||
@@ -3151,34 +3143,6 @@ void MoveCenterTabController::eventLoopTick(
|
||||
return;
|
||||
}
|
||||
|
||||
if ( parent->enableDebug() && parent->debugState() >= 100 )
|
||||
{
|
||||
if ( m_pendingSeatedReloadFromDisk )
|
||||
{
|
||||
double secondsSinceLastRecenter
|
||||
= std::chrono::duration<double>(
|
||||
std::chrono::steady_clock::now()
|
||||
- m_lastSeatedRecenterTimePoint )
|
||||
.count();
|
||||
|
||||
if ( secondsSinceLastRecenter
|
||||
>= ( static_cast<double>( parent->debugState() ) - 100.0 )
|
||||
/ 1000.0 )
|
||||
{
|
||||
vr::VRChaperoneSetup()->ReloadFromDisk(
|
||||
vr::EChaperoneConfigFile_Live );
|
||||
m_pendingSeatedReloadFromDisk = false;
|
||||
}
|
||||
// stop for one loop tick even if it's time to
|
||||
// ReloadFromDisk to give it a little extra time before we
|
||||
// might process motion.
|
||||
|
||||
// if still m_pendingSeatedReloadFromDisk we'll remain waiting
|
||||
// here until it's time, stopping before processing motion.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// only update dynamic motion if the dash is closed
|
||||
if ( !parent->isDashboardVisible() )
|
||||
{
|
||||
|
||||
@@ -100,6 +100,8 @@ class MoveCenterTabController : public QObject
|
||||
setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged )
|
||||
Q_PROPERTY( bool enableSeatedMotion READ enableSeatedMotion WRITE
|
||||
setEnableSeatedMotion NOTIFY enableSeatedMotionChanged )
|
||||
Q_PROPERTY( bool simpleRecenter READ simpleRecenter WRITE setSimpleRecenter
|
||||
NOTIFY simpleRecenterChanged )
|
||||
|
||||
private:
|
||||
OverlayController* parent;
|
||||
@@ -136,7 +138,6 @@ private:
|
||||
float m_gravityFloor = 0.0f;
|
||||
float m_gravityStrength = 9.8f;
|
||||
float m_flingStrength = 1.0f;
|
||||
float m_seatedHeight = 1.0f;
|
||||
bool m_momentumSave = false;
|
||||
bool m_lockXToggle = false;
|
||||
bool m_lockYToggle = false;
|
||||
@@ -175,7 +176,6 @@ private:
|
||||
bool m_chaperoneCommitted = true;
|
||||
bool m_pendingZeroOffsets = true;
|
||||
bool m_pendingSeatedRecenter = false;
|
||||
bool m_pendingSeatedReloadFromDisk = false;
|
||||
bool m_selfRequestedSeatedRecenter = false;
|
||||
bool m_dashWasOpenPreviousFrame = false;
|
||||
bool m_roomSetupModeDetected = false;
|
||||
@@ -185,6 +185,7 @@ private:
|
||||
bool m_oldStyleMotion = false;
|
||||
bool m_universeCenteredRotation = false;
|
||||
bool m_enableSeatedMotion = false;
|
||||
bool m_simpleRecenter = false;
|
||||
unsigned settingsUpdateCounter = 0;
|
||||
int m_hmdRotationStatsUpdateCounter = 0;
|
||||
unsigned m_dragComfortFrameSkipCounter = 0;
|
||||
@@ -192,7 +193,6 @@ private:
|
||||
double m_velocity[3] = { 0.0, 0.0, 0.0 };
|
||||
std::chrono::steady_clock::time_point m_lastGravityUpdateTimePoint;
|
||||
std::chrono::steady_clock::time_point m_lastDragUpdateTimePoint;
|
||||
std::chrono::steady_clock::time_point m_lastSeatedRecenterTimePoint;
|
||||
vr::HmdQuad_t* m_collisionBoundsForReset;
|
||||
uint32_t m_collisionBoundsCountForReset = 0;
|
||||
vr::HmdMatrix34_t m_universeCenterForReset
|
||||
@@ -258,6 +258,7 @@ public:
|
||||
bool oldStyleMotion() const;
|
||||
bool universeCenteredRotation() const;
|
||||
bool enableSeatedMotion() const;
|
||||
bool simpleRecenter() const;
|
||||
bool isInitComplete() const;
|
||||
double getHmdYawTotal();
|
||||
void resetHmdYawTotal();
|
||||
@@ -334,6 +335,7 @@ public slots:
|
||||
void setOldStyleMotion( bool value, bool notify = true );
|
||||
void setUniverseCenteredRotation( bool value, bool notify = true );
|
||||
void setEnableSeatedMotion( bool value, bool notify = true );
|
||||
void setSimpleRecenter( bool value, bool notify = true );
|
||||
|
||||
void shutdown();
|
||||
void reset();
|
||||
@@ -378,6 +380,7 @@ signals:
|
||||
void oldStyleMotionChanged( bool value );
|
||||
void universeCenteredRotationChanged( bool value );
|
||||
void enableSeatedMotionChanged( bool value );
|
||||
void simpleRecenterChanged( bool value );
|
||||
|
||||
void offsetProfilesUpdated();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user