faster EntitySimulation::takeDeadEntities()

This commit is contained in:
Andrew Meadows 2018-03-13 11:38:50 -07:00
parent e1d2a5e5f3
commit 6746e08206
5 changed files with 7 additions and 12 deletions

View file

@ -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();
}

View file

@ -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);

View file

@ -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

View file

@ -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<EntityMotionState*>(entity->getPhysicsInfo());
if (motionState) {
_entitiesToRemoveFromPhysics.insert(entity);
}
}
_deadEntities.swap(deadEntities);
_deadEntities.clear();
}

View file

@ -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);