mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-14 23:36:03 +02:00
faster EntitySimulation::takeDeadEntities()
This commit is contained in:
parent
e1d2a5e5f3
commit
6746e08206
5 changed files with 7 additions and 12 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue