From 52640c8482351a0629fc9ba08ab85537d5fa0f34 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 18 Aug 2014 14:23:29 -0700 Subject: [PATCH] Various tweaks and code cleanup --- interface/src/Application.cpp | 2 ++ interface/src/Recorder.cpp | 29 ++++++++++++++-------------- interface/src/Recorder.h | 13 ++++++------- interface/src/avatar/MyAvatar.cpp | 12 ++++++++++-- interface/src/avatar/MyAvatar.h | 1 + interface/src/renderer/Model.cpp | 8 ++++++++ interface/src/renderer/Model.h | 3 +++ libraries/avatars/src/AvatarData.cpp | 6 ++++++ libraries/avatars/src/AvatarData.h | 4 +++- 9 files changed, 53 insertions(+), 25 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2fef2ced8a..5a689180e5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1047,6 +1047,8 @@ void Application::keyPressEvent(QKeyEvent* event) { break; case Qt::Key_R: if (isShifted) { + Menu::getInstance()->triggerOption(MenuOption::FrustumRenderMode); + } else if (isMeta) { if (_myAvatar->isRecording()) { _myAvatar->stopRecording(); } else { diff --git a/interface/src/Recorder.cpp b/interface/src/Recorder.cpp index b0698b95cb..a2101b28b8 100644 --- a/interface/src/Recorder.cpp +++ b/interface/src/Recorder.cpp @@ -75,6 +75,7 @@ Recorder::Recorder(AvatarData* avatar) : _recording(new Recording()), _avatar(avatar) { + _timer.invalidate(); } bool Recorder::isRecording() const { @@ -124,7 +125,7 @@ void Recorder::saveToFile(QString file) { qDebug() << "Cannot save recording to file, recording is empty."; } - writeRecordingToFile(*_recording, file); + writeRecordingToFile(_recording, file); } void Recorder::record() { @@ -161,6 +162,7 @@ Player::Player(AvatarData* avatar) : _avatar(avatar), _audioThread(NULL) { + _timer.invalidate(); _options.setLoop(false); _options.setVolume(1.0f); } @@ -318,8 +320,16 @@ void Player::startPlaying() { } void Player::stopPlaying() { + if (!isPlaying()) { + return; + } + qDebug() << "Recorder::stopPlaying()"; _timer.invalidate(); + + _avatar->clearJointsData(); + + // Cleanup audio thread _injector->stop(); _injector.clear(); _audioThread->exit(); @@ -332,7 +342,7 @@ void Player::loadFromFile(QString file) { } else { _recording = RecordingPointer(new Recording()); } - readRecordingFromFile(*_recording, file); + readRecordingFromFile(_recording, file); } void Player::loadRecording(RecordingPointer recording) { @@ -368,17 +378,6 @@ void Player::play() { } } -void Player::playAudio() { - _options.setPosition(_avatar->getPosition()); - _options.setOrientation(_avatar->getOrientation()); - - qDebug() << "Play"; - if (_injector) { - _injector->injectAudio(); - } - qDebug() << "Played"; -} - void Player::computeCurrentFrame() { if (!isPlaying()) { qDebug() << "Not Playing"; @@ -396,12 +395,12 @@ void Player::computeCurrentFrame() { } } -void writeRecordingToFile(Recording& recording, QString file) { +void writeRecordingToFile(RecordingPointer recording, QString file) { // TODO qDebug() << "Writing recording to " << file; } -Recording& readRecordingFromFile(Recording& recording, QString file) { +RecordingPointer readRecordingFromFile(RecordingPointer recording, QString file) { // TODO qDebug() << "Reading recording from " << file; return recording; diff --git a/interface/src/Recorder.h b/interface/src/Recorder.h index 9a412aadbf..e1a1119449 100644 --- a/interface/src/Recorder.h +++ b/interface/src/Recorder.h @@ -70,8 +70,8 @@ private: float _leanForward; friend class Recorder; - friend void writeRecordingToFile(Recording& recording, QString file); - friend RecordingPointer readRecordingFromFile(QString file); + friend void writeRecordingToFile(RecordingPointer recording, QString file); + friend RecordingPointer readRecordingFromFile(RecordingPointer recording, QString file); }; /// Stores a recording @@ -101,8 +101,8 @@ private: friend class Recorder; friend class Player; - friend void writeRecordingToFile(Recording& recording, QString file); - friend RecordingPointer readRecordingFromFile(QString file); + friend void writeRecordingToFile(RecordingPointer recording, QString file); + friend RecordingPointer readRecordingFromFile(RecordingPointer recording, QString file); }; /// Records a recording @@ -154,7 +154,6 @@ public slots: void loadFromFile(QString file); void loadRecording(RecordingPointer recording); void play(); - void playAudio(); private: void computeCurrentFrame(); @@ -170,7 +169,7 @@ private: QThread* _audioThread; }; -void writeRecordingToFile(Recording& recording, QString file); -Recording& readRecordingFromFile(Recording& recording, QString file); +void writeRecordingToFile(RecordingPointer recording, QString file); +RecordingPointer readRecordingFromFile(RecordingPointer recording, QString file); #endif // hifi_Recorder_h \ No newline at end of file diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 9ff60dd610..5ed2e3c011 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -922,8 +922,7 @@ const float JOINT_PRIORITY = 2.0f; void MyAvatar::setJointRotations(QVector jointRotations) { for (int i = 0; i < jointRotations.size(); ++i) { if (i < _jointData.size()) { - // TODO change animation priority to proper value - _skeletonModel.setJointState(i, true, jointRotations[i], 100.0f); + _skeletonModel.setJointState(i, true, jointRotations[i], JOINT_PRIORITY + 1.0f); } } } @@ -942,6 +941,15 @@ void MyAvatar::clearJointData(int index) { } } +void MyAvatar::clearJointsData() { + for (int i = 0; i < _jointData.size(); ++i) { + Avatar::clearJointData(i); + if (QThread::currentThread() == thread()) { + _skeletonModel.clearJointState(i); + } + } +} + void MyAvatar::setFaceModelURL(const QUrl& faceModelURL) { Avatar::setFaceModelURL(faceModelURL); _billboardValid = false; diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index bf57bf2367..67d19b87eb 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -115,6 +115,7 @@ public: virtual void setJointRotations(QVector jointRotations); virtual void setJointData(int index, const glm::quat& rotation); virtual void clearJointData(int index); + virtual void clearJointsData(); virtual void setFaceModelURL(const QUrl& faceModelURL); virtual void setSkeletonModelURL(const QUrl& skeletonModelURL); virtual void setAttachmentData(const QVector& attachmentData); diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 2ec676de53..290f9b5c6f 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -692,6 +692,14 @@ bool Model::getVisibleJointState(int index, glm::quat& rotation) const { return !state.rotationIsDefault(rotation); } +void Model::clearJointState(int index) { + if (index != -1 && index < _jointStates.size()) { + JointState& state = _jointStates[index]; + state.setRotationInConstrainedFrame(glm::quat()); + state._animationPriority = 0.0f; + } +} + void Model::setJointState(int index, bool valid, const glm::quat& rotation, float priority) { if (index != -1 && index < _jointStates.size()) { JointState& state = _jointStates[index]; diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 7a29b61420..e45b8091d3 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -118,6 +118,9 @@ public: /// \return whether or not the joint state is "valid" (that is, non-default) bool getVisibleJointState(int index, glm::quat& rotation) const; + /// Clear the joint states + void clearJointState(int index); + /// Sets the joint state at the specified index. void setJointState(int index, bool valid, const glm::quat& rotation = glm::quat(), float priority = 1.0f); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 569e099c2c..9653999555 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -712,6 +712,12 @@ void AvatarData::setJointRotations(QVector jointRotations) { } } +void AvatarData::clearJointsData() { + for (int i = 0; i < _jointData.size(); ++i) { + clearJointData(i); + } +} + bool AvatarData::hasIdentityChangedAfterParsing(const QByteArray &packet) { QDataStream packetStream(packet); packetStream.skipRawData(numBytesForPacketHeader(packet)); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 7dec55b7e9..fa884c0229 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -213,7 +213,9 @@ public: Q_INVOKABLE virtual QVector getJointRotations() const; Q_INVOKABLE virtual void setJointRotations(QVector jointRotations); - + + Q_INVOKABLE virtual void clearJointsData(); + /// Returns the index of the joint with the specified name, or -1 if not found/unknown. Q_INVOKABLE virtual int getJointIndex(const QString& name) const { return _jointIndices.value(name) - 1; }