From e77189fb1bbfc6324c3ac42daf519be5b9ea2e8a Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 20 Jan 2016 17:09:37 -0800 Subject: [PATCH] keep reference to removed entity until next frame --- libraries/physics/src/PhysicalEntitySimulation.cpp | 4 +++- libraries/physics/src/PhysicalEntitySimulation.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index 9ef27aaf53..a677cfae4d 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -142,6 +142,7 @@ void PhysicalEntitySimulation::clearEntitiesInternal() { // finally clear all lists maintained by this class _physicalObjects.clear(); _entitiesToRemoveFromPhysics.clear(); + _entitiesToRelease.clear(); _entitiesToAddToPhysics.clear(); _pendingChanges.clear(); _outgoingChanges.clear(); @@ -157,6 +158,7 @@ void PhysicalEntitySimulation::prepareEntityForDelete(EntityItemPointer entity) // end EntitySimulation overrides void PhysicalEntitySimulation::getObjectsToRemoveFromPhysics(VectorOfMotionStates& result) { + _entitiesToRelease.clear(); result.clear(); QMutexLocker lock(&_mutex); for (auto entity: _entitiesToRemoveFromPhysics) { @@ -171,7 +173,7 @@ void PhysicalEntitySimulation::getObjectsToRemoveFromPhysics(VectorOfMotionState _entitiesToDelete.insert(entity); } } - _entitiesToRemoveFromPhysics.clear(); + _entitiesToRemoveFromPhysics.swap(_entitiesToRelease); } void PhysicalEntitySimulation::getObjectsToAddToPhysics(VectorOfMotionStates& result) { diff --git a/libraries/physics/src/PhysicalEntitySimulation.h b/libraries/physics/src/PhysicalEntitySimulation.h index bc80d50d0a..1c783d2f31 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.h +++ b/libraries/physics/src/PhysicalEntitySimulation.h @@ -60,6 +60,7 @@ public: private: SetOfEntities _entitiesToRemoveFromPhysics; + SetOfEntities _entitiesToRelease; SetOfEntities _entitiesToAddToPhysics; SetOfEntityMotionStates _pendingChanges; // EntityMotionStates already in PhysicsEngine that need their physics changed @@ -70,7 +71,7 @@ private: PhysicsEnginePointer _physicsEngine = nullptr; EntityEditPacketSender* _entityPacketSender = nullptr; - uint32_t _lastStepSendPackets = 0; + uint32_t _lastStepSendPackets { 0 }; };