From 9e686b40960770b8e52249ecc05874af760aede9 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 26 Aug 2014 14:36:46 -0700 Subject: [PATCH] Moved lean and head rotation inside Player class --- interface/src/avatar/MyAvatar.cpp | 15 ++++++--------- libraries/avatars/src/Recorder.cpp | 30 +++++++++++++++++++++--------- libraries/avatars/src/Recorder.h | 2 ++ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index dfedf2eb74..a4ebe85611 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -272,10 +272,12 @@ void MyAvatar::simulate(float deltaTime) { // Update avatar head rotation with sensor data void MyAvatar::updateFromTrackers(float deltaTime) { glm::vec3 estimatedPosition, estimatedRotation; - - if (isPlaying()) { - estimatedRotation = glm::degrees(safeEulerAngles(_player->getHeadRotation())); - } else if (Application::getInstance()->getPrioVR()->hasHeadRotation()) { + + if (isPlaying() && !OculusManager::isConnected()) { + return; + } + + if (Application::getInstance()->getPrioVR()->hasHeadRotation()) { estimatedRotation = glm::degrees(safeEulerAngles(Application::getInstance()->getPrioVR()->getHeadRotation())); estimatedRotation.x *= -1.0f; estimatedRotation.z *= -1.0f; @@ -327,11 +329,6 @@ void MyAvatar::updateFromTrackers(float deltaTime) { } head->setDeltaRoll(estimatedRotation.z); - if (isPlaying()) { - head->setLeanSideways(_player->getLeanSideways()); - head->setLeanForward(_player->getLeanForward()); - return; - } // the priovr can give us exact lean if (Application::getInstance()->getPrioVR()->isActive()) { glm::vec3 eulers = glm::degrees(safeEulerAngles(Application::getInstance()->getPrioVR()->getTorsoRotation())); diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index 09dea9fe22..502b10a460 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -229,6 +229,11 @@ void Player::startPlaying() { _audioThread->start(); QMetaObject::invokeMethod(_injector.data(), "injectAudio", Qt::QueuedConnection); + // Save head orientation + if (_avatar->getHeadData()) { + _originalHeadOrientation = _avatar->getHeadOrientation(); + } + _timer.start(); } } @@ -252,6 +257,12 @@ void Player::stopPlaying() { _audioThread, &QThread::deleteLater); _injector.clear(); _audioThread = NULL; + + // Restore head orientation + if (_avatar->getHeadData()) { + _avatar->setHeadOrientation(_originalHeadOrientation); + } + qDebug() << "Recorder::stopPlaying()"; } @@ -281,10 +292,6 @@ void Player::play() { _avatar->setOrientation(_recording->getFrame(_currentFrame).getRotation()); _avatar->setTargetScale(_recording->getFrame(_currentFrame).getScale()); _avatar->setJointRotations(_recording->getFrame(_currentFrame).getJointRotations()); - HeadData* head = const_cast(_avatar->getHeadData()); - if (head) { - head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients()); - } } else { _avatar->setPosition(_recording->getFrame(0).getTranslation() + _recording->getFrame(_currentFrame).getTranslation()); @@ -293,11 +300,16 @@ void Player::play() { _avatar->setTargetScale(_recording->getFrame(0).getScale() * _recording->getFrame(_currentFrame).getScale()); _avatar->setJointRotations(_recording->getFrame(_currentFrame).getJointRotations()); - HeadData* head = const_cast(_avatar->getHeadData()); - if (head) { - - head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients()); - } + } + HeadData* head = const_cast(_avatar->getHeadData()); + if (head) { + head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients()); + head->setLeanSideways(_recording->getFrame(_currentFrame).getLeanSideways()); + head->setLeanForward(_recording->getFrame(_currentFrame).getLeanForward()); + glm::vec3 eulers = glm::degrees(safeEulerAngles(_recording->getFrame(_currentFrame).getHeadRotation())); + head->setBasePitch(eulers.x); + head->setBaseYaw(eulers.y); + head->setBaseRoll(eulers.z); } _options.setPosition(_avatar->getPosition()); diff --git a/libraries/avatars/src/Recorder.h b/libraries/avatars/src/Recorder.h index 770027a21d..caf6cb665c 100644 --- a/libraries/avatars/src/Recorder.h +++ b/libraries/avatars/src/Recorder.h @@ -162,6 +162,8 @@ private: QSharedPointer _injector; AudioInjectorOptions _options; + glm::quat _originalHeadOrientation; + AvatarData* _avatar; QThread* _audioThread; };