mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 17:41:12 +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();
|
sortEntitiesThatMoved();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntitySimulation::takeDeadEntities(VectorOfEntities& entitiesToDelete) {
|
void EntitySimulation::takeDeadEntities(SetOfEntities& entitiesToDelete) {
|
||||||
QMutexLocker lock(&_mutex);
|
QMutexLocker lock(&_mutex);
|
||||||
for (auto entity : _deadEntities) {
|
entitiesToDelete.swap(_deadEntities);
|
||||||
// push this entity onto the external list
|
|
||||||
entitiesToDelete.push_back(entity);
|
|
||||||
}
|
|
||||||
_deadEntities.clear();
|
_deadEntities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ public:
|
||||||
|
|
||||||
EntityTreePointer getEntityTree() { return _entityTree; }
|
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.
|
/// \param entity pointer to EntityItem that needs to be put on the entitiesToDelete list and removed from others.
|
||||||
virtual void prepareEntityForDelete(EntityItemPointer entity);
|
virtual void prepareEntityForDelete(EntityItemPointer entity);
|
||||||
|
|
|
@ -1800,7 +1800,7 @@ void EntityTree::update(bool simulate) {
|
||||||
_simulation->updateEntities();
|
_simulation->updateEntities();
|
||||||
{
|
{
|
||||||
PROFILE_RANGE(simulation_physics, "Deletes");
|
PROFILE_RANGE(simulation_physics, "Deletes");
|
||||||
VectorOfEntities deadEntities;
|
SetOfEntities deadEntities;
|
||||||
_simulation->takeDeadEntities(deadEntities);
|
_simulation->takeDeadEntities(deadEntities);
|
||||||
if (deadEntities.size() > 0) {
|
if (deadEntities.size() > 0) {
|
||||||
// translate into list of ID's
|
// 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);
|
QMutexLocker lock(&_mutex);
|
||||||
for (auto entity : _deadEntities) {
|
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());
|
EntityMotionState* motionState = static_cast<EntityMotionState*>(entity->getPhysicsInfo());
|
||||||
if (motionState) {
|
if (motionState) {
|
||||||
_entitiesToRemoveFromPhysics.insert(entity);
|
_entitiesToRemoveFromPhysics.insert(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_deadEntities.swap(deadEntities);
|
||||||
_deadEntities.clear();
|
_deadEntities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
virtual void addDynamic(EntityDynamicPointer dynamic) override;
|
virtual void addDynamic(EntityDynamicPointer dynamic) override;
|
||||||
virtual void applyDynamicChanges() override;
|
virtual void applyDynamicChanges() override;
|
||||||
|
|
||||||
virtual void takeDeadEntities(VectorOfEntities& deadEntities) override;
|
virtual void takeDeadEntities(SetOfEntities& deadEntities) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
|
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
|
||||||
|
|
Loading…
Reference in a new issue