initial work on virtual move shortcut
This commit is contained in:
@@ -453,7 +453,7 @@ void OverlayController::OnTimeoutPumpEvents() {
|
|||||||
|
|
||||||
fixFloorTabController.eventLoopTick(devicePoses);
|
fixFloorTabController.eventLoopTick(devicePoses);
|
||||||
statisticsTabController.eventLoopTick(devicePoses, leftSpeed, rightSpeed);
|
statisticsTabController.eventLoopTick(devicePoses, leftSpeed, rightSpeed);
|
||||||
moveCenterTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace());
|
moveCenterTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace(), devicePoses);
|
||||||
steamVRTabController.eventLoopTick();
|
steamVRTabController.eventLoopTick();
|
||||||
chaperoneTabController.eventLoopTick(devicePoses, leftSpeed, rightSpeed, hmdSpeed);
|
chaperoneTabController.eventLoopTick(devicePoses, leftSpeed, rightSpeed, hmdSpeed);
|
||||||
settingsTabController.eventLoopTick();
|
settingsTabController.eventLoopTick();
|
||||||
|
|||||||
@@ -192,12 +192,52 @@ void MoveCenterTabController::reset() {
|
|||||||
emit rotationChanged(m_rotation);
|
emit rotationChanged(m_rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe) {
|
void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe, vr::TrackedDevicePose_t* devicePoses) {
|
||||||
if (settingsUpdateCounter >= 50) {
|
if (settingsUpdateCounter >= 50) {
|
||||||
setTrackingUniverse((int)universe);
|
setTrackingUniverse((int)universe);
|
||||||
settingsUpdateCounter = 0;
|
settingsUpdateCounter = 0;
|
||||||
} else {
|
} else {
|
||||||
settingsUpdateCounter++;
|
settingsUpdateCounter++;
|
||||||
|
|
||||||
|
auto rightId = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(vr::TrackedControllerRole_RightHand);
|
||||||
|
if (rightId == vr::k_unTrackedDeviceIndexInvalid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vr::TrackedDevicePose_t* rightPose = devicePoses + rightId;
|
||||||
|
vr::VRControllerState_t state;
|
||||||
|
if (vr::VRSystem()->GetControllerState(rightId, &state, sizeof(vr::VRControllerState_t))) {
|
||||||
|
if (state.ulButtonPressed & vr::ButtonMaskFromId(vr::k_EButton_ApplicationMenu)) {
|
||||||
|
float newControllerX = rightPose->mDeviceToAbsoluteTracking.m[0][3];
|
||||||
|
float newControllerY = rightPose->mDeviceToAbsoluteTracking.m[1][3];
|
||||||
|
float newControllerZ = rightPose->mDeviceToAbsoluteTracking.m[2][3];
|
||||||
|
if (m_moveActive) {
|
||||||
|
float diffX = newControllerX - m_lastControllerX;
|
||||||
|
float diffY = newControllerY - m_lastControllerY;
|
||||||
|
float diffZ = newControllerZ - m_lastControllerZ;
|
||||||
|
vr::VRChaperoneSetup()->RevertWorkingCopy();
|
||||||
|
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, diffX, m_adjustChaperone, false);
|
||||||
|
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, diffY, m_adjustChaperone, false);
|
||||||
|
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, diffZ, m_adjustChaperone, false);
|
||||||
|
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
|
||||||
|
m_offsetX += diffX;
|
||||||
|
m_offsetY += diffY;
|
||||||
|
m_offsetZ += diffZ;
|
||||||
|
}
|
||||||
|
m_moveActive = true;
|
||||||
|
m_lastControllerX = newControllerX;
|
||||||
|
m_lastControllerY = newControllerY;
|
||||||
|
m_lastControllerZ = newControllerZ;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (m_moveActive) {
|
||||||
|
emit offsetXChanged(m_offsetX);
|
||||||
|
emit offsetYChanged(m_offsetY);
|
||||||
|
emit offsetZChanged(m_offsetZ);
|
||||||
|
}
|
||||||
|
m_moveActive = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ private:
|
|||||||
float m_offsetZ = 0.0f;
|
float m_offsetZ = 0.0f;
|
||||||
int m_rotation = 0;
|
int m_rotation = 0;
|
||||||
bool m_adjustChaperone = true;
|
bool m_adjustChaperone = true;
|
||||||
|
bool m_moveActive = false;
|
||||||
|
float m_lastControllerX = 0.0f;
|
||||||
|
float m_lastControllerY = 0.0f;
|
||||||
|
float m_lastControllerZ = 0.0f;
|
||||||
|
|
||||||
unsigned settingsUpdateCounter = 0;
|
unsigned settingsUpdateCounter = 0;
|
||||||
|
|
||||||
@@ -38,7 +42,7 @@ public:
|
|||||||
void initStage1();
|
void initStage1();
|
||||||
void initStage2(OverlayController* parent, QQuickWindow* widget);
|
void initStage2(OverlayController* parent, QQuickWindow* widget);
|
||||||
|
|
||||||
void eventLoopTick(vr::ETrackingUniverseOrigin universe);
|
void eventLoopTick(vr::ETrackingUniverseOrigin universe, vr::TrackedDevicePose_t* devicePoses);
|
||||||
|
|
||||||
float offsetX() const;
|
float offsetX() const;
|
||||||
float offsetY() const;
|
float offsetY() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user