From adaa36a51d781eb7436f68b69060d6f428998c5d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 4 Feb 2014 15:28:27 -0800 Subject: [PATCH] repairs to key-framed URL sending through avatar-mixer --- assignment-client/src/avatars/AvatarMixer.cpp | 10 ++++++++-- interface/src/Application.cpp | 2 +- interface/src/avatar/AvatarManager.cpp | 16 ++++++++-------- libraries/avatars/src/AvatarData.cpp | 2 ++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 5590b73021..ecf9bfe4b2 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -122,7 +122,9 @@ void broadcastIdentityPacket() { } // send out the final packet - nodeList->broadcastToNodes(avatarIdentityPacket, NodeSet() << NodeType::Agent); + if (avatarIdentityPacket.size() > numPacketHeaderBytes) { + nodeList->broadcastToNodes(avatarIdentityPacket, NodeSet() << NodeType::Agent); + } } void AvatarMixer::nodeKilled(SharedNodePointer killedNode) { @@ -170,7 +172,11 @@ void AvatarMixer::processDatagram(const QByteArray& dataByteArray, const HifiSoc && !nodeData->hasSentIdentityBetweenKeyFrames()) { // this avatar changed their identity in some way and we haven't sent a packet in this keyframe QByteArray identityPacket = byteArrayWithPopluatedHeader(PacketTypeAvatarIdentity); - identityPacket.append(nodeData->identityByteArray()); + + QByteArray individualByteArray = nodeData->identityByteArray(); + individualByteArray.replace(0, NUM_BYTES_RFC4122_UUID, nodeUUID.toRfc4122()); + + identityPacket.append(individualByteArray); nodeData->setHasSentIdentityBetweenKeyFrames(true); nodeList->broadcastToNodes(identityPacket, NodeSet() << NodeType::Agent); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3537b66478..33b118f7d3 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -247,7 +247,7 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : // send the identity packet for our avatar each second to our avatar mixer QTimer* identityPacketTimer = new QTimer(); connect(identityPacketTimer, &QTimer::timeout, _myAvatar, &MyAvatar::sendIdentityPacket); - silentNodeTimer->start(1000); + identityPacketTimer->start(1000); QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index f587e3c941..71255427f8 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -179,6 +179,7 @@ void AvatarManager::processAvatarDataPacket(const QByteArray &datagram, const QW } void AvatarManager::processAvatarIdentityPacket(const QByteArray &packet) { + qDebug() << "Processing an avatar identity packet"; // setup a data stream to parse the packet QDataStream identityStream(packet); identityStream.skipRawData(numBytesForPacketHeader(packet)); @@ -186,28 +187,27 @@ void AvatarManager::processAvatarIdentityPacket(const QByteArray &packet) { QUuid nodeUUID; while (!identityStream.atEnd()) { - identityStream >> nodeUUID; + + QUrl faceMeshURL, skeletonURL; + identityStream >> nodeUUID >> faceMeshURL >> skeletonURL; // mesh URL for a UUID, find avatar in our list AvatarSharedPointer matchingAvatar = _avatarHash.value(nodeUUID); if (matchingAvatar) { - QUrl faceMeshURL, skeletonURL; - identityStream >> faceMeshURL >> skeletonURL; - Avatar* avatar = static_cast(matchingAvatar.data()); - if (avatar->getHead().getFaceModel().getURL() != faceMeshURL) { + if (avatar->getFaceModelURL() != faceMeshURL) { qDebug() << "Changing mesh to" << faceMeshURL.toString() << "for avatar with UUID" << uuidStringWithoutCurlyBraces(nodeUUID); - avatar->getHead().getFaceModel().setURL(faceMeshURL); + avatar->setFaceModelURL(faceMeshURL); } - if (avatar->getSkeletonModel().getURL() != skeletonURL) { + if (avatar->getFaceModelURL() != skeletonURL) { qDebug() << "Changing skeleton to" << skeletonURL << "for avatar with UUID" << uuidStringWithoutCurlyBraces(nodeUUID); - avatar->getSkeletonModel().setURL(skeletonURL); + avatar->setFaceModelURL(skeletonURL); } } } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index ae765f71a7..90e3cd7149 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -280,6 +280,8 @@ bool AvatarData::hasIdentityChangedAfterParsing(const QByteArray &packet) { bool hasIdentityChanged = false; + qDebug() << faceModelURL; + if (faceModelURL != _faceModelURL) { setFaceModelURL(faceModelURL); hasIdentityChanged = true;