Add motion page, comfort mode, rename "room" to "space"

This commit is contained in:
Kung-vr
2019-02-10 23:55:48 +09:00
parent be19793b48
commit 55e0915fc4
16 changed files with 585 additions and 182 deletions
+1 -1
View File
@@ -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 };
+138 -15
View File
@@ -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
+34 -9
View File
@@ -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 )
{