fix stuck drive keys for Avatar when modifier released

This commit is contained in:
Stephen Birarda 2014-09-11 11:48:26 -07:00
parent 0e4de53c99
commit de24842cf0
3 changed files with 17 additions and 3 deletions

View file

@ -905,7 +905,9 @@ void Application::keyPressEvent(QKeyEvent* event) {
break; break;
case Qt::Key_D: case Qt::Key_D:
_myAvatar->setDriveKeys(ROT_RIGHT, 1.f); if (!isMeta) {
_myAvatar->setDriveKeys(ROT_RIGHT, 1.f);
}
break; break;
case Qt::Key_Return: case Qt::Key_Return:
@ -1073,7 +1075,7 @@ void Application::keyReleaseEvent(QKeyEvent* event) {
_keysPressed.remove(event->key()); _keysPressed.remove(event->key());
_controllerScriptingInterface.emitKeyReleaseEvent(event); // send events to any registered scripts _controllerScriptingInterface.emitKeyReleaseEvent(event); // send events to any registered scripts
// if one of our scripts have asked to capture this event, then stop processing it // if one of our scripts have asked to capture this event, then stop processing it
if (_controllerScriptingInterface.isKeyCaptured(event)) { if (_controllerScriptingInterface.isKeyCaptured(event)) {
return; return;
@ -1125,7 +1127,12 @@ void Application::keyReleaseEvent(QKeyEvent* event) {
_myAvatar->setDriveKeys(RIGHT, 0.f); _myAvatar->setDriveKeys(RIGHT, 0.f);
_myAvatar->setDriveKeys(ROT_RIGHT, 0.f); _myAvatar->setDriveKeys(ROT_RIGHT, 0.f);
break; break;
case Qt::Key_Control:
case Qt::Key_Shift:
case Qt::Key_Meta:
case Qt::Key_Alt:
_myAvatar->clearDriveKeys();
break;
default: default:
event->ignore(); event->ignore();
break; break;

View file

@ -1972,3 +1972,9 @@ glm::vec3 MyAvatar::getLaserPointerTipPosition(const PalmData* palm) {
return palm->getPosition(); return palm->getPosition();
} }
void MyAvatar::clearDriveKeys() {
for (int i = 0; i < sizeof(_driveKeys); i++) {
_driveKeys[i] = 0.0f;
}
}

View file

@ -98,6 +98,7 @@ public:
AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const; AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const;
// Set what driving keys are being pressed to control thrust levels // Set what driving keys are being pressed to control thrust levels
void clearDriveKeys();
void setDriveKeys(int key, float val) { _driveKeys[key] = val; }; void setDriveKeys(int key, float val) { _driveKeys[key] = val; };
bool getDriveKeys(int key) { return _driveKeys[key] != 0.f; }; bool getDriveKeys(int key) { return _driveKeys[key] != 0.f; };
void jump() { _shouldJump = true; }; void jump() { _shouldJump = true; };