better solution

This commit is contained in:
Dante Ruiz 2017-11-28 13:16:47 -08:00
parent 7daad29906
commit 9a5f0dea95

View file

@ -280,13 +280,13 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu
_inputDevice->update(deltaTime, inputCalibrationData); _inputDevice->update(deltaTime, inputCalibrationData);
}); });
if (isDesktopMode() && _registeredWithInputMapper) { if (_inputDevice->_trackedControllers == 0 && _registeredWithInputMapper) {
userInputMapper->removeDevice(_inputDevice->_deviceID); userInputMapper->removeDevice(_inputDevice->_deviceID);
_registeredWithInputMapper = false; _registeredWithInputMapper = false;
_inputDevice->_poseStateMap.clear(); _inputDevice->_poseStateMap.clear();
} }
if (!_registeredWithInputMapper && !isDesktopMode()) { if (!_registeredWithInputMapper && _inputDevice->_trackedControllers > 0) {
userInputMapper->registerDevice(_inputDevice); userInputMapper->registerDevice(_inputDevice);
_registeredWithInputMapper = true; _registeredWithInputMapper = true;
} }
@ -337,6 +337,7 @@ void ViveControllerManager::InputDevice::update(float deltaTime, const controlle
_poseStateMap.clear(); _poseStateMap.clear();
_buttonPressedMap.clear(); _buttonPressedMap.clear();
_validTrackedObjects.clear(); _validTrackedObjects.clear();
_trackedControllers = 0;
// While the keyboard is open, we defer strictly to the keyboard values // While the keyboard is open, we defer strictly to the keyboard values
if (isOpenVrKeyboardShown()) { if (isOpenVrKeyboardShown()) {
@ -369,20 +370,19 @@ void ViveControllerManager::InputDevice::update(float deltaTime, const controlle
} }
} }
int numTrackedControllers = 0;
if (leftHandDeviceIndex != vr::k_unTrackedDeviceIndexInvalid) { if (leftHandDeviceIndex != vr::k_unTrackedDeviceIndexInvalid) {
numTrackedControllers++; _trackedControllers++;
} }
if (rightHandDeviceIndex != vr::k_unTrackedDeviceIndexInvalid) { if (rightHandDeviceIndex != vr::k_unTrackedDeviceIndexInvalid) {
numTrackedControllers++; _trackedControllers++;
} }
_trackedControllers = numTrackedControllers;
calibrateFromHandController(inputCalibrationData); calibrateFromHandController(inputCalibrationData);
calibrateFromUI(inputCalibrationData); calibrateFromUI(inputCalibrationData);
updateCalibratedLimbs(inputCalibrationData); updateCalibratedLimbs(inputCalibrationData);
_lastSimPoseData = _nextSimPoseData; _lastSimPoseData = _nextSimPoseData;
qDebug() << _trackedControllers;
} }
void ViveControllerManager::InputDevice::calibrateFromHandController(const controller::InputCalibrationData& inputCalibrationData) { void ViveControllerManager::InputDevice::calibrateFromHandController(const controller::InputCalibrationData& inputCalibrationData) {
@ -527,6 +527,7 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde
// but _validTrackedObjects remain in sensor frame // but _validTrackedObjects remain in sensor frame
_validTrackedObjects.push_back(std::make_pair(poseIndex, pose)); _validTrackedObjects.push_back(std::make_pair(poseIndex, pose));
_trackedControllers++;
} else { } else {
controller::Pose invalidPose; controller::Pose invalidPose;
_poseStateMap[poseIndex] = invalidPose; _poseStateMap[poseIndex] = invalidPose;
@ -758,9 +759,9 @@ void ViveControllerManager::InputDevice::handleHmd(uint32_t deviceIndex, const c
} else { } else {
const mat4& mat = mat4(); const mat4& mat = mat4();
const vec3 zero = vec3(); const vec3 zero = vec3();
handleHeadPoseEvent(inputCalibrationData, mat, zero, zero); handleHeadPoseEvent(inputCalibrationData, mat, zero, zero);
} }
_trackedControllers++;
} }
} }