Added axis locks to playspace mover

This commit is contained in:
ykeara
2018-11-03 19:36:15 -05:00
parent ac00fde604
commit 3596562bd0
5 changed files with 235 additions and 25 deletions
+100 -22
View File
@@ -189,33 +189,91 @@ void MoveCenterTabController::setRequireDoubleClick(bool value, bool notify) {
}
}
void MoveCenterTabController::modOffsetX(float value, bool notify) {
auto angle = m_rotation * 2 * M_PI / 360.0;
float offset[3] = { value, 0, 0 };
rotateCoordinates(offset, angle);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
m_offsetX += value;
bool MoveCenterTabController::lockXToggle() const {
return m_lockXToggle;
}
void MoveCenterTabController::setLockX(bool value, bool notify) {
m_lockXToggle = value;
auto settings = OverlayController::appSettings();
settings->beginGroup("playspaceSettings");
settings->setValue("lockXToggle", m_lockXToggle);
settings->endGroup();
settings->sync();
if (notify) {
emit offsetXChanged(m_offsetX);
emit requireLockXChanged(m_lockXToggle);
}
}
bool MoveCenterTabController::lockYToggle() const {
return m_lockYToggle;
}
void MoveCenterTabController::setLockY(bool value, bool notify) {
m_lockYToggle = value;
auto settings = OverlayController::appSettings();
settings->beginGroup("playspaceSettings");
settings->setValue("lockYToggle", m_lockXToggle);
settings->endGroup();
settings->sync();
if (notify) {
emit requireLockYChanged(m_lockYToggle);
}
}
bool MoveCenterTabController::lockZToggle() const {
return m_lockZToggle;
}
void MoveCenterTabController::setLockZ(bool value, bool notify) {
m_lockZToggle = value;
auto settings = OverlayController::appSettings();
settings->beginGroup("playspaceSettings");
settings->setValue("lockZToggle", m_lockZToggle);
settings->endGroup();
settings->sync();
if (notify) {
emit requireLockZChanged(m_lockZToggle);
}
}
void MoveCenterTabController::modOffsetX(float value, bool notify) {
//TODO ? possible issue with locking position this way
if (!m_lockXToggle) {
auto angle = m_rotation * 2 * M_PI / 360.0;
float offset[3] = { value, 0, 0 };
rotateCoordinates(offset, angle);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
m_offsetX += value;
if (notify) {
emit offsetXChanged(m_offsetX);
}
}
}
void MoveCenterTabController::modOffsetY(float value, bool notify) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value, m_adjustChaperone);
m_offsetY += value;
if (notify) {
emit offsetYChanged(m_offsetY);
if (!m_lockYToggle) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value, m_adjustChaperone);
m_offsetY += value;
if (notify) {
emit offsetYChanged(m_offsetY);
}
}
}
void MoveCenterTabController::modOffsetZ(float value, bool notify) {
auto angle = m_rotation * 2 * M_PI / 360.0;
float offset[3] = { 0, 0, value };
rotateCoordinates(offset, angle);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
m_offsetZ += value;
if (notify) {
emit offsetZChanged(m_offsetZ);
if (!m_lockZToggle) {
auto angle = m_rotation * 2 * M_PI / 360.0;
float offset[3] = { 0, 0, value };
rotateCoordinates(offset, angle);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
m_offsetZ += value;
if (notify) {
emit offsetZChanged(m_offsetZ);
}
}
}
@@ -351,13 +409,33 @@ void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe
};
// offset is un-rotated coordinates
m_offsetX += diff[0];
m_offsetY += diff[1];
m_offsetZ += diff[2];
//prevents UI from updating if axis movement is locked
if (!m_lockXToggle) {
m_offsetX += diff[0];
}
if (!m_lockYToggle) {
m_offsetY += diff[1];
}
if (!m_lockZToggle) {
m_offsetZ += diff[2];
}
rotateCoordinates(diff, angle);
//If locked removes movement
if (m_lockXToggle) {
diff[0] = 0;
}
if (m_lockYToggle) {
diff[1] = 0;
}
if (m_lockZToggle) {
diff[2] = 0;
}
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone);
}
m_lastControllerPosition[0] = absoluteControllerPosition[0];
m_lastControllerPosition[1] = absoluteControllerPosition[1];
@@ -24,6 +24,9 @@ class MoveCenterTabController : public QObject {
Q_PROPERTY(bool moveShortcutRight READ moveShortcutRight WRITE setMoveShortcutRight NOTIFY moveShortcutRightChanged)
Q_PROPERTY(bool moveShortcutLeft READ moveShortcutLeft WRITE setMoveShortcutLeft NOTIFY moveShortcutLeftChanged)
Q_PROPERTY(bool requireDoubleClick READ requireDoubleClick WRITE setRequireDoubleClick NOTIFY requireDoubleClickChanged)
Q_PROPERTY(bool lockXToggle READ lockXToggle WRITE setLockX NOTIFY requireLockXChanged)
Q_PROPERTY(bool lockYToggle READ lockYToggle WRITE setLockY NOTIFY requireLockYChanged)
Q_PROPERTY(bool lockZToggle READ lockZToggle WRITE setLockZ NOTIFY requireLockZChanged)
private:
OverlayController* parent;
@@ -42,6 +45,9 @@ private:
bool m_moveShortcutRightEnabled = false;
bool m_moveShortcutLeftEnabled = false;
bool m_requireDoubleClick = false;
bool m_lockXToggle = false;
bool m_lockYToggle = false;
bool m_lockZToggle = false;
std::chrono::system_clock::time_point lastMoveButtonClick[2];
unsigned settingsUpdateCounter = 0;
@@ -62,6 +68,9 @@ public:
bool moveShortcutRight() const;
bool moveShortcutLeft() const;
bool requireDoubleClick() const;
bool lockXToggle() const;
bool lockYToggle() const;
bool lockZToggle() const;
public slots:
int trackingUniverse() const;
@@ -82,6 +91,11 @@ public slots:
void modOffsetX(float value, bool notify = true);
void modOffsetY(float value, bool notify = true);
void modOffsetZ(float value, bool notify = true);
void setLockX(bool value, bool notify = true);
void setLockY(bool value, bool notify = true);
void setLockZ(bool value, bool notify = true);
void reset();
signals:
@@ -94,6 +108,9 @@ signals:
void moveShortcutRightChanged(bool value);
void moveShortcutLeftChanged(bool value);
void requireDoubleClickChanged(bool value);
void requireLockXChanged(bool value);
void requireLockYChanged(bool value);
void requireLockZChanged(bool value);
};
} // namespace advsettings