From 72cacc4cef489fa12749ea6ba531cfbc8fd46cc9 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 28 Sep 2017 19:56:15 -0700 Subject: [PATCH] server only deletes and entity if it's still the child of an avatar, not if it has ever been --- libraries/entities/src/EntityItem.cpp | 8 ++++++-- libraries/entities/src/EntityTree.cpp | 7 +++++++ libraries/entities/src/EntityTree.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 107af837fe..643145942a 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1570,13 +1570,17 @@ void EntityItem::updatePosition(const glm::vec3& value) { } void EntityItem::updateParentID(const QUuid& value) { - if (getParentID() != value) { + QUuid oldParentID = getParentID(); + if (oldParentID != value) { + EntityTreePointer tree = getTree(); + if (!oldParentID.isNull()) { + tree->removeFromChildrenOfAvatars(getThisPointer()); + } setParentID(value); // children are forced to be kinematic // may need to not collide with own avatar markDirtyFlags(Simulation::DIRTY_MOTION_TYPE | Simulation::DIRTY_COLLISION_GROUP); - EntityTreePointer tree = getTree(); if (tree) { tree->addToNeedsParentFixupList(getThisPointer()); } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index c8675bdcba..bcb73f352c 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1326,6 +1326,13 @@ void EntityTree::deleteDescendantsOfAvatar(QUuid avatarID) { } } +void EntityTree::removeFromChildrenOfAvatars(EntityItemPointer entity) { + QUuid avatarID = entity->getParentID(); + if (_childrenOfAvatars.contains(avatarID)) { + _childrenOfAvatars[avatarID].remove(entity->getID()); + } +} + void EntityTree::addToNeedsParentFixupList(EntityItemPointer entity) { QWriteLocker locker(&_needsParentFixupLock); _needsParentFixup.append(entity); diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index c0183d7ec2..cb16f2fac1 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -254,6 +254,7 @@ public: void knowAvatarID(QUuid avatarID) { _avatarIDs += avatarID; } void forgetAvatarID(QUuid avatarID) { _avatarIDs -= avatarID; } void deleteDescendantsOfAvatar(QUuid avatarID); + void removeFromChildrenOfAvatars(EntityItemPointer entity); void addToNeedsParentFixupList(EntityItemPointer entity);