From 3beceb4d7d9e99d01eb6c1f9cf64a77f37f795d4 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 1 Mar 2021 22:03:02 +1300 Subject: [PATCH] Clear user's avatar entities if rez permissions change to "no" --- assignment-client/src/avatars/AvatarMixerSlave.cpp | 7 +++++++ libraries/avatars/src/AvatarData.cpp | 8 ++++++++ libraries/avatars/src/AvatarData.h | 2 ++ 3 files changed, 17 insertions(+) diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 522f0bf163..b253aaf437 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -432,6 +432,13 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) } } + if (sendAvatar) { + if (!sourceAvatarNode->getCanRezAvatarEntities()) { + auto sourceAvatarNodeData = reinterpret_cast(sourceAvatarNode->getLinkedData()); + sourceAvatarNodeData->getAvatar().clearAvatarEntities(); + } + } + if (sendAvatar) { AvatarDataSequenceNumber lastSeqToReceiver = destinationNodeData->getLastBroadcastSequenceNumber(sourceAvatarNode->getLocalID()); AvatarDataSequenceNumber lastSeqFromSender = sourceAvatarNodeData->getLastReceivedSequenceNumber(); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index adb7222ee3..ea331137a7 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -3046,6 +3046,14 @@ void AvatarData::clearAvatarEntity(const QUuid& entityID, bool requiresRemovalFr } } +void AvatarData::clearAvatarEntities() { + _avatarEntitiesLock.withReadLock([this] { + foreach(auto entityID, _packedAvatarEntityData.keys()) { + clearAvatarEntity(entityID); + } + }); +} + AvatarEntityMap AvatarData::getAvatarEntityData() const { // overridden where needed // NOTE: the return value is expected to be a map of unfortunately-formatted-binary-blobs diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 2e25c9559c..758d90b4a6 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1186,6 +1186,8 @@ public: * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE virtual void clearAvatarEntity(const QUuid& entityID, bool requiresRemovalFromTree = true); + + void clearAvatarEntities(); /**jsdoc * Enables blend shapes set using {@link Avatar.setBlendshape} or {@link MyAvatar.setBlendshape} to be transmitted to other