verify pose during virtual move

This commit is contained in:
Robin Appelman
2018-04-02 11:57:40 +02:00
parent 9fb22b7d0b
commit 4e2a4bd570
+12 -8
View File
@@ -216,7 +216,7 @@ void MoveCenterTabController::reset() {
bool isMoveShortCutPressed(vr::ETrackedControllerRole hand) { bool isMoveShortCutPressed(vr::ETrackedControllerRole hand) {
auto handId = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(hand); auto handId = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(hand);
if (handId == vr::k_unTrackedDeviceIndexInvalid) { if (handId == vr::k_unTrackedDeviceIndexInvalid || handId >= vr::k_unMaxTrackedDeviceCount) {
return false; return false;
} }
@@ -270,19 +270,25 @@ void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe
settingsUpdateCounter++; settingsUpdateCounter++;
auto oldMoveHand = m_activeMoveController; auto oldMoveHand = m_activeMoveController;
auto newMoveHand = getMoveShortcutHand(); auto newMoveHand = getMoveShortcutHand();
if (newMoveHand == vr::TrackedControllerRole_Invalid) {
emit offsetXChanged(m_offsetX);
emit offsetYChanged(m_offsetY);
emit offsetZChanged(m_offsetZ);
return;
}
auto handId = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(newMoveHand); auto handId = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(newMoveHand);
if (newMoveHand == vr::TrackedControllerRole_Invalid || handId == vr::k_unTrackedDeviceIndexInvalid) { if (newMoveHand == vr::TrackedControllerRole_Invalid || handId == vr::k_unTrackedDeviceIndexInvalid || handId >= vr::k_unMaxTrackedDeviceCount) {
if (oldMoveHand != vr::TrackedControllerRole_Invalid) { if (oldMoveHand != vr::TrackedControllerRole_Invalid) {
emit offsetXChanged(m_offsetX); emit offsetXChanged(m_offsetX);
emit offsetYChanged(m_offsetY); emit offsetYChanged(m_offsetY);
emit offsetZChanged(m_offsetZ); emit offsetZChanged(m_offsetZ);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
} }
return; return;
} }
vr::TrackedDevicePose_t* pose = devicePoses + handId; vr::TrackedDevicePose_t* pose = devicePoses + handId;
vr::VRControllerState_t state; if (!pose->bPoseIsValid || !pose->bDeviceIsConnected || pose->eTrackingResult != vr::TrackingResult_Running_OK) {
if (vr::VRSystem()->GetControllerState(handId, &state, sizeof(vr::VRControllerState_t))) { return;
}
float relativeControllerPosition[] = { float relativeControllerPosition[] = {
pose->mDeviceToAbsoluteTracking.m[0][3], pose->mDeviceToAbsoluteTracking.m[0][3],
pose->mDeviceToAbsoluteTracking.m[1][3], pose->mDeviceToAbsoluteTracking.m[1][3],
@@ -312,14 +318,12 @@ void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe
rotateCoordinates(diff, angle); rotateCoordinates(diff, angle);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone, false); parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, diff, m_adjustChaperone);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Temp);
} }
m_lastControllerPosition[0] = absoluteControllerPosition[0]; m_lastControllerPosition[0] = absoluteControllerPosition[0];
m_lastControllerPosition[1] = absoluteControllerPosition[1]; m_lastControllerPosition[1] = absoluteControllerPosition[1];
m_lastControllerPosition[2] = absoluteControllerPosition[2]; m_lastControllerPosition[2] = absoluteControllerPosition[2];
} }
} }
}
} // namespace advconfig } // namespace advconfig