From e61470517c344b17686be62043b1866da8253503 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 6 May 2015 11:01:16 -0700 Subject: [PATCH] track all entities added to simulation --- libraries/entities/src/EntitySimulation.cpp | 17 +++++++++++++++++ libraries/entities/src/EntitySimulation.h | 1 + 2 files changed, 18 insertions(+) diff --git a/libraries/entities/src/EntitySimulation.cpp b/libraries/entities/src/EntitySimulation.cpp index 761a496c44..d28e139205 100644 --- a/libraries/entities/src/EntitySimulation.cpp +++ b/libraries/entities/src/EntitySimulation.cpp @@ -77,6 +77,8 @@ void EntitySimulation::expireMortalEntities(const quint64& now) { _entitiesToSort.remove(entity); _simpleKinematicEntities.remove(entity); removeEntityInternal(entity); + + _allEntities.remove(entity); entity->_simulated = false; } else { if (expiry < _nextExpiry) { @@ -125,7 +127,10 @@ void EntitySimulation::sortEntitiesThatMoved() { _entitiesToUpdate.remove(entity); _simpleKinematicEntities.remove(entity); removeEntityInternal(entity); + + _allEntities.remove(entity); entity->_simulated = false; + itemItr = _entitiesToSort.erase(itemItr); } else { moveOperator.addEntityToMoveList(entity, newCube); @@ -153,6 +158,8 @@ void EntitySimulation::addEntity(EntityItem* entity) { _entitiesToUpdate.insert(entity); } addEntityInternal(entity); + + _allEntities.insert(entity); entity->_simulated = true; // DirtyFlags are used to signal changes to entities that have already been added, @@ -166,7 +173,10 @@ void EntitySimulation::removeEntity(EntityItem* entity) { _mortalEntities.remove(entity); _entitiesToSort.remove(entity); _simpleKinematicEntities.remove(entity); + _entitiesToDelete.remove(entity); removeEntityInternal(entity); + + _allEntities.remove(entity); entity->_simulated = false; } @@ -227,7 +237,14 @@ void EntitySimulation::clearEntities() { _entitiesToUpdate.clear(); _entitiesToSort.clear(); _simpleKinematicEntities.clear(); + _entitiesToDelete.clear(); + clearEntitiesInternal(); + + for (auto entityItr : _allEntities) { + entityItr->_simulated = false; + } + _allEntities.clear(); } void EntitySimulation::moveSimpleKinematics(const quint64& now) { diff --git a/libraries/entities/src/EntitySimulation.h b/libraries/entities/src/EntitySimulation.h index 13d30b7a37..a73afe9fd7 100644 --- a/libraries/entities/src/EntitySimulation.h +++ b/libraries/entities/src/EntitySimulation.h @@ -103,6 +103,7 @@ protected: // We maintain multiple lists, each for its distinct purpose. // An entity may be in more than one list. + SetOfEntities _allEntities; // tracks all entities added the simulation SetOfEntities _mortalEntities; // entities that have an expiry quint64 _nextExpiry; SetOfEntities _entitiesToUpdate; // entities that need to call EntityItem::update()