Merge branch 'master' of https://github.com/highfidelity/hifi into virtualEntities

This commit is contained in:
ZappoMan 2014-08-08 15:13:55 -07:00
commit 275a5c4a47
6 changed files with 31 additions and 16 deletions

View file

@ -261,8 +261,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer))); connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer)));
connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer))); connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer)));
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer))); connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer)));
connect(nodeList, &NodeList::uuidChanged, this, &Application::updateWindowTitle); connect(nodeList, &NodeList::uuidChanged, _myAvatar, &MyAvatar::setSessionUUID);
connect(nodeList, SIGNAL(uuidChanged(const QUuid&)), _myAvatar, SLOT(setSessionUUID(const QUuid&)));
connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset); connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset);
// connect to appropriate slots on AccountManager // connect to appropriate slots on AccountManager

View file

@ -290,7 +290,7 @@ public slots:
void sendBillboardPacket(); void sendBillboardPacket();
void setBillboardFromNetworkReply(); void setBillboardFromNetworkReply();
void setJointMappingsFromNetworkReply(); void setJointMappingsFromNetworkReply();
void setSessionUUID(const QUuid& id) { _sessionUUID = id; } void setSessionUUID(const QUuid& sessionUUID) { _sessionUUID = sessionUUID; }
bool hasReferential(); bool hasReferential();
protected: protected:

View file

@ -9,19 +9,21 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <NodeList.h>
#include <PacketHeaders.h> #include <PacketHeaders.h>
#include "AvatarHashMap.h" #include "AvatarHashMap.h"
AvatarHashMap::AvatarHashMap() : AvatarHashMap::AvatarHashMap() :
_avatarHash() _avatarHash(),
_lastOwnerSessionUUID()
{ {
connect(NodeList::getInstance(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged);
} }
void AvatarHashMap::insert(const QUuid& id, AvatarSharedPointer avatar) { void AvatarHashMap::insert(const QUuid& sessionUUID, AvatarSharedPointer avatar) {
_avatarHash.insert(id, avatar); _avatarHash.insert(sessionUUID, avatar);
avatar->setSessionUUID(id); avatar->setSessionUUID(sessionUUID);
} }
AvatarHash::iterator AvatarHashMap::erase(const AvatarHash::iterator& iterator) { AvatarHash::iterator AvatarHashMap::erase(const AvatarHash::iterator& iterator) {
@ -110,10 +112,16 @@ void AvatarHashMap::processAvatarDataPacket(const QByteArray &datagram, const QW
QUuid sessionUUID = QUuid::fromRfc4122(datagram.mid(bytesRead, NUM_BYTES_RFC4122_UUID)); QUuid sessionUUID = QUuid::fromRfc4122(datagram.mid(bytesRead, NUM_BYTES_RFC4122_UUID));
bytesRead += NUM_BYTES_RFC4122_UUID; bytesRead += NUM_BYTES_RFC4122_UUID;
if (sessionUUID != _lastOwnerSessionUUID) {
AvatarSharedPointer matchingAvatarData = matchingOrNewAvatar(sessionUUID, mixerWeakPointer); AvatarSharedPointer matchingAvatarData = matchingOrNewAvatar(sessionUUID, mixerWeakPointer);
// have the matching (or new) avatar parse the data from the packet // have the matching (or new) avatar parse the data from the packet
bytesRead += matchingAvatarData->parseDataAtOffset(datagram, bytesRead); bytesRead += matchingAvatarData->parseDataAtOffset(datagram, bytesRead);
} else {
// create a dummy AvatarData class to throw this data on the ground
AvatarData dummyData;
bytesRead += dummyData.parseDataAtOffset(datagram, bytesRead);
}
} }
} }
@ -177,3 +185,7 @@ void AvatarHashMap::processKillAvatar(const QByteArray& datagram) {
erase(matchedAvatar); erase(matchedAvatar);
} }
} }
void AvatarHashMap::sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID) {
_lastOwnerSessionUUID = oldUUID;
}

View file

@ -31,12 +31,15 @@ public:
const AvatarHash& getAvatarHash() { return _avatarHash; } const AvatarHash& getAvatarHash() { return _avatarHash; }
int size() const { return _avatarHash.size(); } int size() const { return _avatarHash.size(); }
virtual void insert(const QUuid& id, AvatarSharedPointer avatar); virtual void insert(const QUuid& sessionUUID, AvatarSharedPointer avatar);
public slots: public slots:
void processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer<Node>& mixerWeakPointer); void processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer<Node>& mixerWeakPointer);
bool containsAvatarWithDisplayName(const QString& displayName); bool containsAvatarWithDisplayName(const QString& displayName);
private slots:
void sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID);
protected: protected:
virtual AvatarHash::iterator erase(const AvatarHash::iterator& iterator); virtual AvatarHash::iterator erase(const AvatarHash::iterator& iterator);
@ -51,6 +54,7 @@ protected:
void processKillAvatar(const QByteArray& datagram); void processKillAvatar(const QByteArray& datagram);
AvatarHash _avatarHash; AvatarHash _avatarHash;
QUuid _lastOwnerSessionUUID;
}; };
#endif // hifi_AvatarHashMap_h #endif // hifi_AvatarHashMap_h

View file

@ -95,7 +95,7 @@ void LimitedNodeList::setSessionUUID(const QUuid& sessionUUID) {
if (sessionUUID != oldUUID) { if (sessionUUID != oldUUID) {
qDebug() << "NodeList UUID changed from" << uuidStringWithoutCurlyBraces(oldUUID) qDebug() << "NodeList UUID changed from" << uuidStringWithoutCurlyBraces(oldUUID)
<< "to" << uuidStringWithoutCurlyBraces(_sessionUUID); << "to" << uuidStringWithoutCurlyBraces(_sessionUUID);
emit uuidChanged(sessionUUID); emit uuidChanged(sessionUUID, oldUUID);
} }
} }

View file

@ -107,7 +107,7 @@ public slots:
void killNodeWithUUID(const QUuid& nodeUUID); void killNodeWithUUID(const QUuid& nodeUUID);
signals: signals:
void uuidChanged(const QUuid& ownerUUID); void uuidChanged(const QUuid& ownerUUID, const QUuid& oldUUID);
void nodeAdded(SharedNodePointer); void nodeAdded(SharedNodePointer);
void nodeKilled(SharedNodePointer); void nodeKilled(SharedNodePointer);
protected: protected: