diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index a0a8a33ca8..fa64540c4e 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -228,7 +228,7 @@ void EntityTree::setSimulation(EntitySimulation* simulation) { _simulation = simulation; } -void EntityTree::deleteEntity(const EntityItemID& entityID) { +void EntityTree::deleteEntity(const EntityItemID& entityID, bool force) { EntityTreeElement* containingElement = getContainingElement(entityID); if (!containingElement) { qDebug() << "UNEXPECTED!!!! EntityTree::deleteEntity() entityID doesn't exist!!! entityID=" << entityID; @@ -241,7 +241,7 @@ void EntityTree::deleteEntity(const EntityItemID& entityID) { return; } - if (existingEntity->getLocked()) { + if (existingEntity->getLocked() && !force) { qDebug() << "ERROR! EntityTree::deleteEntity() trying to delete locked entity. entityID=" << entityID; return; } @@ -255,7 +255,7 @@ void EntityTree::deleteEntity(const EntityItemID& entityID) { _isDirty = true; } -void EntityTree::deleteEntities(QSet entityIDs) { +void EntityTree::deleteEntities(QSet entityIDs, bool force) { // NOTE: callers must lock the tree before using this method DeleteEntityOperator theOperator(this); foreach(const EntityItemID& entityID, entityIDs) { @@ -271,7 +271,7 @@ void EntityTree::deleteEntities(QSet entityIDs) { continue; } - if (existingEntity->getLocked()) { + if (existingEntity->getLocked() && !force) { qDebug() << "ERROR! EntityTree::deleteEntities() trying to delete locked entity. entityID=" << entityID; continue; } @@ -667,7 +667,7 @@ void EntityTree::update() { foreach (EntityItem* entity, entitiesToDelete) { idsToDelete.insert(entity->getEntityItemID()); } - deleteEntities(idsToDelete); + deleteEntities(idsToDelete, true); } unlock(); } diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 405cbecd99..b4621f1a10 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -91,8 +91,8 @@ public: // use this method if you have a pointer to the entity (avoid an extra entity lookup) bool updateEntity(EntityItem* entity, const EntityItemProperties& properties); - void deleteEntity(const EntityItemID& entityID); - void deleteEntities(QSet entityIDs); + void deleteEntity(const EntityItemID& entityID, bool force = false); + void deleteEntities(QSet entityIDs, bool force = false); void removeEntityFromSimulation(EntityItem* entity); const EntityItem* findClosestEntity(glm::vec3 position, float targetRadius);