simplify move playspace code

This commit is contained in:
Robin Appelman
2018-03-28 19:24:48 +02:00
parent 9522e45466
commit f540125149
+26 -50
View File
@@ -110,37 +110,20 @@ void MoveCenterTabController::setAdjustChaperone(bool value, bool notify) {
m_adjustChaperone = value; m_adjustChaperone = value;
if (m_trackingUniverse == vr::TrackingUniverseStanding) { if (m_trackingUniverse == vr::TrackingUniverseStanding) {
vr::VRChaperoneSetup()->RevertWorkingCopy(); vr::VRChaperoneSetup()->RevertWorkingCopy();
float offsetdir; auto angle = m_rotation * 2 * M_PI / 360.0;
if (m_adjustChaperone) { float offsetdir = m_adjustChaperone ? -1.0 : 1.0;
offsetdir = -1.0; float offset[3] = {
} else { offsetdir * m_offsetX,
offsetdir = 1.0; offsetdir * m_offsetY,
} offsetdir * m_offsetZ
};
rotateCoordinates(offset, angle);
parent->AddOffsetToCollisionBounds(offset, false);
if (m_offsetX != 0.0f) {
if (m_adjustChaperone || m_rotation == 0) {
parent->AddOffsetToCollisionBounds(0, offsetdir * m_offsetX, false);
} else {
auto angle = m_rotation * 2 * M_PI / 360.0;
parent->AddOffsetToCollisionBounds(0, offsetdir * m_offsetX * std::cos(angle), false);
parent->AddOffsetToCollisionBounds(2, offsetdir * m_offsetX * std::sin(angle), false);
}
}
if (m_offsetY != 0.0f) {
parent->AddOffsetToCollisionBounds(1, offsetdir * m_offsetY, false);
}
if (m_offsetZ != 0.0f) {
if (m_adjustChaperone || m_rotation == 0) {
parent->AddOffsetToCollisionBounds(2, offsetdir * m_offsetZ, false);
} else {
auto angle = m_rotation * 2 * M_PI / 360.0;
parent->AddOffsetToCollisionBounds(2, offsetdir * m_offsetZ * std::cos(angle), false);
parent->AddOffsetToCollisionBounds(0, -offsetdir * m_offsetZ * std::sin(angle), false);
}
}
if (m_rotation != 0) { if (m_rotation != 0) {
float angle = m_rotation * 2 * M_PI / 360.0; float angle = m_rotation * 2 * M_PI / 360.0;
parent->RotateCollisionBounds(offsetdir * angle, false); //parent->RotateCollisionBounds(offsetdir * angle, false);
} }
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live); vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
} }
@@ -189,15 +172,10 @@ void MoveCenterTabController::setMoveShortcutLeft(bool value, bool notify) {
} }
void MoveCenterTabController::modOffsetX(float value, bool notify) { void MoveCenterTabController::modOffsetX(float value, bool notify) {
if (m_rotation == 0) { auto angle = m_rotation * 2 * M_PI / 360.0;
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value, m_adjustChaperone); float offset[3] = { value, 0, 0 };
} else { rotateCoordinates(offset, angle);
auto angle = m_rotation * 2 * M_PI / 360.0; parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value * std::cos(angle), m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::sin(angle), m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
}
m_offsetX += value; m_offsetX += value;
if (notify) { if (notify) {
emit offsetXChanged(m_offsetX); emit offsetXChanged(m_offsetX);
@@ -213,15 +191,10 @@ void MoveCenterTabController::modOffsetY(float value, bool notify) {
} }
void MoveCenterTabController::modOffsetZ(float value, bool notify) { void MoveCenterTabController::modOffsetZ(float value, bool notify) {
if (m_rotation == 0) { auto angle = m_rotation * 2 * M_PI / 360.0;
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value, m_adjustChaperone); float offset[3] = { 0, 0, value };
} else { rotateCoordinates(offset, angle);
auto angle = m_rotation * 2 * M_PI / 360.0; parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone);
vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::cos(angle), m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -value * std::sin(angle), m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
}
m_offsetZ += value; m_offsetZ += value;
if (notify) { if (notify) {
emit offsetZChanged(m_offsetZ); emit offsetZChanged(m_offsetZ);
@@ -231,9 +204,12 @@ void MoveCenterTabController::modOffsetZ(float value, bool notify) {
void MoveCenterTabController::reset() { void MoveCenterTabController::reset() {
vr::VRChaperoneSetup()->RevertWorkingCopy(); vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, -m_rotation * 2 * M_PI / 360.0, m_adjustChaperone, false); parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, -m_rotation * 2 * M_PI / 360.0, m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -m_offsetX, m_adjustChaperone, false); float offset[3] = {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -m_offsetY, m_adjustChaperone, false); -m_offsetX,
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, -m_offsetZ, m_adjustChaperone, false); -m_offsetY,
-m_offsetZ
};
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, offset, m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live); vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
m_offsetX = 0.0f; m_offsetX = 0.0f;
m_offsetY = 0.0f; m_offsetY = 0.0f;
@@ -306,7 +282,7 @@ void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe
emit offsetZChanged(m_offsetZ); emit offsetZChanged(m_offsetZ);
} }
return; return;
} else if (newMoveHand != vr::TrackedControllerRole_Invalid) { } else if (newMoveHand != vr::TrackedControllerRole_Invalid && oldMoveHand == vr::TrackedControllerRole_Invalid) {
vr::VRChaperoneSetup()->RevertWorkingCopy(); vr::VRChaperoneSetup()->RevertWorkingCopy();
} }
vr::TrackedDevicePose_t* pose = devicePoses + handId; vr::TrackedDevicePose_t* pose = devicePoses + handId;