diff --git a/libraries/entities/src/EntitySimulation.cpp b/libraries/entities/src/EntitySimulation.cpp index 0edb7492d5..47e3e51fb9 100644 --- a/libraries/entities/src/EntitySimulation.cpp +++ b/libraries/entities/src/EntitySimulation.cpp @@ -40,12 +40,9 @@ void EntitySimulation::updateEntities() { sortEntitiesThatMoved(); } -void EntitySimulation::takeDeadEntities(VectorOfEntities& entitiesToDelete) { +void EntitySimulation::takeDeadEntities(SetOfEntities& entitiesToDelete) { QMutexLocker lock(&_mutex); - for (auto entity : _deadEntities) { - // push this entity onto the external list - entitiesToDelete.push_back(entity); - } + entitiesToDelete.swap(_deadEntities); _deadEntities.clear(); } diff --git a/libraries/entities/src/EntitySimulation.h b/libraries/entities/src/EntitySimulation.h index 92a3e3207b..b5edb31907 100644 --- a/libraries/entities/src/EntitySimulation.h +++ b/libraries/entities/src/EntitySimulation.h @@ -75,7 +75,7 @@ public: EntityTreePointer getEntityTree() { return _entityTree; } - virtual void takeDeadEntities(VectorOfEntities& entitiesToDelete); + virtual void takeDeadEntities(SetOfEntities& entitiesToDelete); /// \param entity pointer to EntityItem that needs to be put on the entitiesToDelete list and removed from others. virtual void prepareEntityForDelete(EntityItemPointer entity); diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 7a3ed91d51..232880880e 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1800,7 +1800,7 @@ void EntityTree::update(bool simulate) { _simulation->updateEntities(); { PROFILE_RANGE(simulation_physics, "Deletes"); - VectorOfEntities deadEntities; + SetOfEntities deadEntities; _simulation->takeDeadEntities(deadEntities); if (deadEntities.size() > 0) { // translate into list of ID's diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index fb7123b7b6..7161cff1da 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -73,17 +73,15 @@ void PhysicalEntitySimulation::removeEntityInternal(EntityItemPointer entity) { } } -void PhysicalEntitySimulation::takeDeadEntities(VectorOfEntities& deadEntities) { +void PhysicalEntitySimulation::takeDeadEntities(SetOfEntities& deadEntities) { QMutexLocker lock(&_mutex); for (auto entity : _deadEntities) { - // this entity is still in its tree, so we insert into the external list - deadEntities.push_back(entity); - EntityMotionState* motionState = static_cast(entity->getPhysicsInfo()); if (motionState) { _entitiesToRemoveFromPhysics.insert(entity); } } + _deadEntities.swap(deadEntities); _deadEntities.clear(); } diff --git a/libraries/physics/src/PhysicalEntitySimulation.h b/libraries/physics/src/PhysicalEntitySimulation.h index 0823198e2d..4425a73709 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.h +++ b/libraries/physics/src/PhysicalEntitySimulation.h @@ -38,7 +38,7 @@ public: virtual void addDynamic(EntityDynamicPointer dynamic) override; virtual void applyDynamicChanges() override; - virtual void takeDeadEntities(VectorOfEntities& deadEntities) override; + virtual void takeDeadEntities(SetOfEntities& deadEntities) override; signals: void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);