Moved lean and head rotation inside Player class

This commit is contained in:
Atlante45 2014-08-26 14:36:46 -07:00
parent 90d8626615
commit 9e686b4096
3 changed files with 29 additions and 18 deletions

View file

@ -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()));

View file

@ -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<HeadData*>(_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<HeadData*>(_avatar->getHeadData());
if (head) {
head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients());
}
}
HeadData* head = const_cast<HeadData*>(_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());

View file

@ -162,6 +162,8 @@ private:
QSharedPointer<AudioInjector> _injector;
AudioInjectorOptions _options;
glm::quat _originalHeadOrientation;
AvatarData* _avatar;
QThread* _audioThread;
};