mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 18:44:01 +02:00
Update AvatarHashMap to use packet callbacks
This commit is contained in:
parent
bb132e354b
commit
32b232c87a
2 changed files with 25 additions and 9 deletions
|
@ -19,7 +19,6 @@
|
|||
AvatarHashMap::AvatarHashMap() {
|
||||
connect(DependencyManager::get<NodeList>().data(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged);
|
||||
|
||||
|
||||
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
|
||||
packetReceiver.registerPacketListener(PacketType::BulkAvatarData, this, "processAvatarDataPacket");
|
||||
packetReceiver.registerPacketListener(PacketType::KillAvatar, this, "processKillAvatar");
|
||||
|
@ -58,6 +57,10 @@ void AvatarHashMap::processAvatarDataPacket(std::unique_ptr<NLPacket> packet, Hi
|
|||
int bytesRead = 0;
|
||||
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
if (avatarMixer) {
|
||||
avatarMixer->setLastHeardMicrostamp(usecTimestampNow());
|
||||
}
|
||||
|
||||
// enumerate over all of the avatars in this packet
|
||||
// only add them if mixerWeakPointer points to something (meaning that mixer is still around)
|
||||
while (bytesRead < data.size() && avatarMixer.data()) {
|
||||
|
@ -86,6 +89,11 @@ void AvatarHashMap::processAvatarIdentityPacket(std::unique_ptr<NLPacket> packet
|
|||
|
||||
QUuid sessionUUID;
|
||||
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
if (avatarMixer) {
|
||||
avatarMixer->setLastHeardMicrostamp(usecTimestampNow());
|
||||
}
|
||||
|
||||
while (!identityStream.atEnd()) {
|
||||
|
||||
QUrl faceMeshURL, skeletonURL;
|
||||
|
@ -96,7 +104,6 @@ void AvatarHashMap::processAvatarIdentityPacket(std::unique_ptr<NLPacket> packet
|
|||
// mesh URL for a UUID, find avatar in our list
|
||||
AvatarSharedPointer avatar = _avatarHash.value(sessionUUID);
|
||||
if (!avatar) {
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
avatar = addAvatar(sessionUUID, avatarMixer);
|
||||
}
|
||||
if (avatar->getFaceModelURL() != faceMeshURL) {
|
||||
|
@ -121,9 +128,13 @@ void AvatarHashMap::processAvatarBillboardPacket(std::unique_ptr<NLPacket> packe
|
|||
const auto data = QByteArray::fromRawData(packet->getPayload(), packet->size);
|
||||
QUuid sessionUUID = QUuid::fromRfc4122(QByteArray::fromRawData(data, NUM_BYTES_RFC4122_UUID));
|
||||
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
if (avatarMixer) {
|
||||
avatarMixer->setLastHeardMicrostamp(usecTimestampNow());
|
||||
}
|
||||
|
||||
AvatarSharedPointer avatar = _avatarHash.value(sessionUUID);
|
||||
if (!avatar) {
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
avatar = addAvatar(sessionUUID, avatarMixer);
|
||||
}
|
||||
|
||||
|
@ -134,6 +145,11 @@ void AvatarHashMap::processAvatarBillboardPacket(std::unique_ptr<NLPacket> packe
|
|||
}
|
||||
|
||||
void AvatarHashMap::processKillAvatar(std::unique_ptr<NLPacket> packet, HifiSockAddr senderSockAddr) {
|
||||
SharedNodePointer avatarMixer = DependencyManager::get<NodeList>()->nodeWithUUID(packet->getSourceID());
|
||||
if (avatarMixer) {
|
||||
avatarMixer->setLastHeardMicrostamp(usecTimestampNow());
|
||||
}
|
||||
|
||||
// read the node id
|
||||
QUuid sessionUUID = QUuid::fromRfc4122(QByteArray(packet->getPayload(), NUM_BYTES_RFC4122_UUID));
|
||||
removeAvatar(sessionUUID);
|
||||
|
|
|
@ -27,29 +27,29 @@
|
|||
class AvatarHashMap : public QObject, public Dependency {
|
||||
Q_OBJECT
|
||||
SINGLETON_DEPENDENCY
|
||||
|
||||
|
||||
public:
|
||||
const AvatarHash& getAvatarHash() { return _avatarHash; }
|
||||
int size() { return _avatarHash.size(); }
|
||||
|
||||
|
||||
public slots:
|
||||
void processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer<Node>& mixerWeakPointer);
|
||||
bool isAvatarInRange(const glm::vec3 & position, const float range);
|
||||
|
||||
|
||||
private slots:
|
||||
void sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID);
|
||||
void processAvatarDataPacket(std::unique_ptr<NLPacket> packet, HifiSockAddr senderSockAddr);
|
||||
void processAvatarIdentityPacket(std::unique_ptr<NLPacket> packet, HifiSockAddr senderSockAddr);
|
||||
void processAvatarBillboardPacket(std::unique_ptr<NLPacket> packet, HifiSockAddr senderSockAddr);
|
||||
void processKillAvatar(std::unique_ptr<NLPacket> packet, HifiSockAddr senderSockAddr);
|
||||
|
||||
|
||||
protected:
|
||||
AvatarHashMap();
|
||||
|
||||
|
||||
virtual AvatarSharedPointer newSharedAvatar();
|
||||
virtual AvatarSharedPointer addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer);
|
||||
virtual void removeAvatar(const QUuid& sessionUUID);
|
||||
|
||||
|
||||
AvatarHash _avatarHash;
|
||||
|
||||
private:
|
||||
|
|
Loading…
Reference in a new issue