Add motion page, comfort mode, rename "room" to "space"
This commit is contained in:
@@ -145,7 +145,7 @@ void FixFloorTabController::eventLoopTick(
|
||||
floorOffsetZ = tempOffsetZ;
|
||||
|
||||
LOG( INFO )
|
||||
<< "Fix Floor and adjust room center: Floor Offset = ["
|
||||
<< "Fix Floor and adjust space center: Floor Offset = ["
|
||||
<< floorOffsetX << ", " << floorOffsetY << ", "
|
||||
<< floorOffsetZ << "]";
|
||||
float offset[3] = { 0, 0, 0 };
|
||||
|
||||
@@ -52,6 +52,26 @@ void MoveCenterTabController::initStage1()
|
||||
{
|
||||
m_settingsLeftHandDragEnabled = value.toBool();
|
||||
}
|
||||
value = settings->value( "turnBindLeft", m_settingsLeftHandTurnEnabled );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
m_settingsLeftHandTurnEnabled = value.toBool();
|
||||
}
|
||||
value = settings->value( "turnBindRight", m_settingsRightHandTurnEnabled );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
m_settingsRightHandTurnEnabled = value.toBool();
|
||||
}
|
||||
value = settings->value( "dragComfortFactor", m_dragComfortFactor );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
m_dragComfortFactor = value.toUInt();
|
||||
}
|
||||
value = settings->value( "turnComfortFactor", m_turnComfortFactor );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
m_turnComfortFactor = value.toUInt();
|
||||
}
|
||||
value = settings->value( "lockXToggle", m_lockXToggle );
|
||||
if ( value.isValid() && !value.isNull() )
|
||||
{
|
||||
@@ -68,7 +88,6 @@ void MoveCenterTabController::initStage1()
|
||||
m_lockZToggle = value.toBool();
|
||||
}
|
||||
settings->endGroup();
|
||||
lastMoveButtonClick[0] = lastMoveButtonClick[1] = clock::now();
|
||||
}
|
||||
|
||||
void MoveCenterTabController::initStage2( OverlayController* var_parent,
|
||||
@@ -345,6 +364,84 @@ void MoveCenterTabController::setMoveShortcutLeft( bool value, bool notify )
|
||||
}
|
||||
}
|
||||
|
||||
bool MoveCenterTabController::turnBindLeft() const
|
||||
{
|
||||
return m_settingsLeftHandTurnEnabled;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setTurnBindLeft( bool value, bool notify )
|
||||
{
|
||||
m_settingsLeftHandTurnEnabled = value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup( "playspaceSettings" );
|
||||
settings->setValue( "turnBindLeft", m_settingsLeftHandTurnEnabled );
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if ( notify )
|
||||
{
|
||||
emit turnBindLeftChanged( m_settingsLeftHandTurnEnabled );
|
||||
}
|
||||
}
|
||||
|
||||
bool MoveCenterTabController::turnBindRight() const
|
||||
{
|
||||
return m_settingsRightHandTurnEnabled;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setTurnBindRight( bool value, bool notify )
|
||||
{
|
||||
m_settingsRightHandTurnEnabled = value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup( "playspaceSettings" );
|
||||
settings->setValue( "turnBindRight", m_settingsRightHandTurnEnabled );
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if ( notify )
|
||||
{
|
||||
emit turnBindRightChanged( m_settingsRightHandTurnEnabled );
|
||||
}
|
||||
}
|
||||
|
||||
unsigned MoveCenterTabController::dragComfortFactor() const
|
||||
{
|
||||
return m_dragComfortFactor;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setDragComfortFactor( unsigned value,
|
||||
bool notify )
|
||||
{
|
||||
m_dragComfortFactor = value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup( "playspaceSettings" );
|
||||
settings->setValue( "dragComfortFactor", m_dragComfortFactor );
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if ( notify )
|
||||
{
|
||||
emit dragComfortFactorChanged( m_dragComfortFactor );
|
||||
}
|
||||
}
|
||||
|
||||
unsigned MoveCenterTabController::turnComfortFactor() const
|
||||
{
|
||||
return m_turnComfortFactor;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setTurnComfortFactor( unsigned value,
|
||||
bool notify )
|
||||
{
|
||||
m_turnComfortFactor = value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup( "playspaceSettings" );
|
||||
settings->setValue( "turnComfortFactor", m_turnComfortFactor );
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if ( notify )
|
||||
{
|
||||
emit turnComfortFactorChanged( m_turnComfortFactor );
|
||||
}
|
||||
}
|
||||
|
||||
bool MoveCenterTabController::lockXToggle() const
|
||||
{
|
||||
return m_lockXToggle;
|
||||
@@ -513,7 +610,7 @@ void MoveCenterTabController::resetHmdYawTotal()
|
||||
|
||||
// START of drag bindings:
|
||||
|
||||
void MoveCenterTabController::leftHandRoomDrag( bool leftHandDragActive )
|
||||
void MoveCenterTabController::leftHandSpaceDrag( bool leftHandDragActive )
|
||||
{
|
||||
if ( !m_settingsLeftHandDragEnabled )
|
||||
{
|
||||
@@ -556,7 +653,7 @@ void MoveCenterTabController::leftHandRoomDrag( bool leftHandDragActive )
|
||||
m_leftHandDragPressed = leftHandDragActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::rightHandRoomDrag( bool rightHandDragActive )
|
||||
void MoveCenterTabController::rightHandSpaceDrag( bool rightHandDragActive )
|
||||
{
|
||||
if ( !m_settingsRightHandDragEnabled )
|
||||
{
|
||||
@@ -599,7 +696,7 @@ void MoveCenterTabController::rightHandRoomDrag( bool rightHandDragActive )
|
||||
m_rightHandDragPressed = rightHandDragActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::optionalOverrideLeftHandRoomDrag(
|
||||
void MoveCenterTabController::optionalOverrideLeftHandSpaceDrag(
|
||||
bool overrideLeftHandDragActive )
|
||||
{
|
||||
if ( !m_settingsLeftHandDragEnabled )
|
||||
@@ -641,7 +738,7 @@ void MoveCenterTabController::optionalOverrideLeftHandRoomDrag(
|
||||
m_overrideLeftHandDragPressed = overrideLeftHandDragActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::optionalOverrideRightHandRoomDrag(
|
||||
void MoveCenterTabController::optionalOverrideRightHandSpaceDrag(
|
||||
bool overrideRightHandDragActive )
|
||||
{
|
||||
if ( !m_settingsRightHandDragEnabled )
|
||||
@@ -687,9 +784,9 @@ void MoveCenterTabController::optionalOverrideRightHandRoomDrag(
|
||||
|
||||
// START of turn bindgins
|
||||
|
||||
void MoveCenterTabController::leftHandRoomTurn( bool leftHandTurnActive )
|
||||
void MoveCenterTabController::leftHandSpaceTurn( bool leftHandTurnActive )
|
||||
{
|
||||
if ( !m_settingsHandTurningEnabled )
|
||||
if ( !m_settingsLeftHandTurnEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -730,9 +827,9 @@ void MoveCenterTabController::leftHandRoomTurn( bool leftHandTurnActive )
|
||||
m_leftHandTurnPressed = leftHandTurnActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::rightHandRoomTurn( bool rightHandTurnActive )
|
||||
void MoveCenterTabController::rightHandSpaceTurn( bool rightHandTurnActive )
|
||||
{
|
||||
if ( !m_settingsHandTurningEnabled )
|
||||
if ( !m_settingsRightHandTurnEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -773,10 +870,10 @@ void MoveCenterTabController::rightHandRoomTurn( bool rightHandTurnActive )
|
||||
m_rightHandTurnPressed = rightHandTurnActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::optionalOverrideLeftHandRoomTurn(
|
||||
void MoveCenterTabController::optionalOverrideLeftHandSpaceTurn(
|
||||
bool overrideLeftHandTurnActive )
|
||||
{
|
||||
if ( !m_settingsHandTurningEnabled )
|
||||
if ( !m_settingsLeftHandTurnEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -815,10 +912,10 @@ void MoveCenterTabController::optionalOverrideLeftHandRoomTurn(
|
||||
m_overrideLeftHandTurnPressed = overrideLeftHandTurnActive;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::optionalOverrideRightHandRoomTurn(
|
||||
void MoveCenterTabController::optionalOverrideRightHandSpaceTurn(
|
||||
bool overrideRightHandTurnActive )
|
||||
{
|
||||
if ( !m_settingsHandTurningEnabled )
|
||||
if ( !m_settingsRightHandTurnEnabled )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1113,6 +1210,8 @@ void MoveCenterTabController::eventLoopTick(
|
||||
// get current space rotation in radians
|
||||
double angle = m_rotation * k_centidegreesToRadians;
|
||||
|
||||
// hmd rotations stats counting doesn't need to be smooth, so we skip some
|
||||
// frames for performance
|
||||
if ( m_hmdRotationStatsUpdateCounter >= k_hmdRotationCounterUpdateRate )
|
||||
{
|
||||
// device pose index 0 is always the hmd
|
||||
@@ -1124,8 +1223,32 @@ void MoveCenterTabController::eventLoopTick(
|
||||
m_hmdRotationStatsUpdateCounter++;
|
||||
}
|
||||
|
||||
updateHandDrag( devicePoses, angle );
|
||||
// Smooth drag motion can cause sim-sickness so we check if the user wants
|
||||
// to skip frames to reduce vection. We use the factor squared because of
|
||||
// logarithmic human perception.
|
||||
if ( m_dragComfortFrameSkipCounter
|
||||
>= ( m_dragComfortFactor * m_dragComfortFactor ) )
|
||||
{
|
||||
updateHandDrag( devicePoses, angle );
|
||||
m_dragComfortFrameSkipCounter = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dragComfortFrameSkipCounter++;
|
||||
}
|
||||
|
||||
updateHandTurn( devicePoses, angle );
|
||||
// Smooth turn motion can cause sim-sickness so we check if the user wants
|
||||
// to skip frames to reduce vection. We use the factor squared because of
|
||||
// logarithmic human perception.
|
||||
if ( m_turnComfortFrameSkipCounter
|
||||
>= ( m_turnComfortFactor * m_turnComfortFactor ) )
|
||||
{
|
||||
updateHandTurn( devicePoses, angle );
|
||||
m_turnComfortFrameSkipCounter = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_turnComfortFrameSkipCounter++;
|
||||
}
|
||||
}
|
||||
} // namespace advsettings
|
||||
|
||||
@@ -39,6 +39,14 @@ class MoveCenterTabController : public QObject
|
||||
setMoveShortcutRight NOTIFY moveShortcutRightChanged )
|
||||
Q_PROPERTY( bool moveShortcutLeft READ moveShortcutLeft WRITE
|
||||
setMoveShortcutLeft NOTIFY moveShortcutLeftChanged )
|
||||
Q_PROPERTY( bool turnBindLeft READ turnBindLeft WRITE setTurnBindLeft NOTIFY
|
||||
turnBindLeftChanged )
|
||||
Q_PROPERTY( bool turnBindRight READ turnBindRight WRITE setTurnBindRight
|
||||
NOTIFY turnBindRightChanged )
|
||||
Q_PROPERTY( unsigned dragComfortFactor READ dragComfortFactor WRITE
|
||||
setDragComfortFactor NOTIFY dragComfortFactorChanged )
|
||||
Q_PROPERTY( unsigned turnComfortFactor READ turnComfortFactor WRITE
|
||||
setTurnComfortFactor NOTIFY turnComfortFactorChanged )
|
||||
Q_PROPERTY( bool lockXToggle READ lockXToggle WRITE setLockX NOTIFY
|
||||
requireLockXChanged )
|
||||
Q_PROPERTY( bool lockYToggle READ lockYToggle WRITE setLockY NOTIFY
|
||||
@@ -66,10 +74,13 @@ private:
|
||||
float m_lastControllerPosition[3];
|
||||
bool m_settingsRightHandDragEnabled = false;
|
||||
bool m_settingsLeftHandDragEnabled = false;
|
||||
bool m_settingsLeftHandTurnEnabled = false;
|
||||
bool m_settingsRightHandTurnEnabled = false;
|
||||
unsigned m_dragComfortFactor = 0;
|
||||
unsigned m_turnComfortFactor = 0;
|
||||
bool m_lockXToggle = false;
|
||||
bool m_lockYToggle = false;
|
||||
bool m_lockZToggle = false;
|
||||
std::chrono::system_clock::time_point lastMoveButtonClick[2];
|
||||
// Set lastHandQuaternion.w to -1000.0 when last hand is invalid.
|
||||
vr::HmdQuaternion_t m_lastHandQuaternion
|
||||
= { k_quaternionInvalidValue, 0.0, 0.0, 0.0 };
|
||||
@@ -97,6 +108,8 @@ private:
|
||||
bool m_overrideRightHandTurnPressed = false;
|
||||
unsigned settingsUpdateCounter = 0;
|
||||
int m_hmdRotationStatsUpdateCounter = 0;
|
||||
unsigned m_dragComfortFrameSkipCounter = 0;
|
||||
unsigned m_turnComfortFrameSkipCounter = 0;
|
||||
void updateHmdRotationCounter( vr::TrackedDevicePose_t hmdPose,
|
||||
double angle );
|
||||
void updateHandDrag( vr::TrackedDevicePose_t* devicePoses, double angle );
|
||||
@@ -118,6 +131,10 @@ public:
|
||||
bool rotateHand() const;
|
||||
bool moveShortcutRight() const;
|
||||
bool moveShortcutLeft() const;
|
||||
bool turnBindRight() const;
|
||||
bool turnBindLeft() const;
|
||||
unsigned dragComfortFactor() const;
|
||||
unsigned turnComfortFactor() const;
|
||||
bool lockXToggle() const;
|
||||
bool lockYToggle() const;
|
||||
bool lockZToggle() const;
|
||||
@@ -125,14 +142,14 @@ public:
|
||||
void resetHmdYawTotal();
|
||||
|
||||
// actions:
|
||||
void leftHandRoomDrag( bool leftHandDragActive );
|
||||
void rightHandRoomDrag( bool rightHandDragActive );
|
||||
void optionalOverrideLeftHandRoomDrag( bool overrideLeftHandDragActive );
|
||||
void optionalOverrideRightHandRoomDrag( bool overrideRightHandDragActive );
|
||||
void leftHandRoomTurn( bool leftHandTurnActive );
|
||||
void rightHandRoomTurn( bool rightHandTurnActive );
|
||||
void optionalOverrideLeftHandRoomTurn( bool overrideLeftHandTurnActive );
|
||||
void optionalOverrideRightHandRoomTurn( bool overrideRightHandTurnActive );
|
||||
void leftHandSpaceDrag( bool leftHandDragActive );
|
||||
void rightHandSpaceDrag( bool rightHandDragActive );
|
||||
void optionalOverrideLeftHandSpaceDrag( bool overrideLeftHandDragActive );
|
||||
void optionalOverrideRightHandSpaceDrag( bool overrideRightHandDragActive );
|
||||
void leftHandSpaceTurn( bool leftHandTurnActive );
|
||||
void rightHandSpaceTurn( bool rightHandTurnActive );
|
||||
void optionalOverrideLeftHandSpaceTurn( bool overrideLeftHandTurnActive );
|
||||
void optionalOverrideRightHandSpaceTurn( bool overrideRightHandTurnActive );
|
||||
|
||||
public slots:
|
||||
int trackingUniverse() const;
|
||||
@@ -152,6 +169,10 @@ public slots:
|
||||
|
||||
void setMoveShortcutRight( bool value, bool notify = true );
|
||||
void setMoveShortcutLeft( bool value, bool notify = true );
|
||||
void setTurnBindRight( bool value, bool notify = true );
|
||||
void setTurnBindLeft( bool value, bool notify = true );
|
||||
void setDragComfortFactor( unsigned value, bool notify = true );
|
||||
void setTurnComfortFactor( unsigned value, bool notify = true );
|
||||
|
||||
void modOffsetX( float value, bool notify = true );
|
||||
void modOffsetY( float value, bool notify = true );
|
||||
@@ -175,6 +196,10 @@ signals:
|
||||
void rotateHandChanged( bool value );
|
||||
void moveShortcutRightChanged( bool value );
|
||||
void moveShortcutLeftChanged( bool value );
|
||||
void turnBindRightChanged( bool value );
|
||||
void turnBindLeftChanged( bool value );
|
||||
void dragComfortFactorChanged( unsigned value );
|
||||
void turnComfortFactorChanged( unsigned value );
|
||||
void requireLockXChanged( bool value );
|
||||
void requireLockYChanged( bool value );
|
||||
void requireLockZChanged( bool value );
|
||||
|
||||
@@ -78,8 +78,8 @@ void StatisticsTabController::eventLoopTick(
|
||||
}
|
||||
|
||||
// HMD Rotation //
|
||||
double roomHmdYawTotal = parent->m_moveCenterTabController.getHmdYawTotal();
|
||||
m_hmdRotation = static_cast<float>( roomHmdYawTotal / ( 2.0 * M_PI ) );
|
||||
double spaceHmdYawTotal = parent->m_moveCenterTabController.getHmdYawTotal();
|
||||
m_hmdRotation = static_cast<float>( spaceHmdYawTotal / ( 2.0 * M_PI ) );
|
||||
|
||||
if ( lastPosTimer <= 0 )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user