diff --git a/libraries/shared/src/PhysicsEntity.cpp b/libraries/shared/src/PhysicsEntity.cpp index 10c08a3cea..03d36c1c99 100644 --- a/libraries/shared/src/PhysicsEntity.cpp +++ b/libraries/shared/src/PhysicsEntity.cpp @@ -10,6 +10,8 @@ // #include "PhysicsEntity.h" + +#include "PhysicsSimulation.h" #include "Shape.h" #include "ShapeCollider.h" @@ -23,8 +25,10 @@ PhysicsEntity::PhysicsEntity() : } PhysicsEntity::~PhysicsEntity() { - // entity should be removed from the simulation before it is deleted - assert(_simulation == NULL); + if (_simulation) { + _simulation->removeEntity(this); + _simulation = NULL; + } } void PhysicsEntity::setTranslation(const glm::vec3& translation) { diff --git a/libraries/shared/src/PhysicsSimulation.cpp b/libraries/shared/src/PhysicsSimulation.cpp index c7c3f5e161..5c0c2c9883 100644 --- a/libraries/shared/src/PhysicsSimulation.cpp +++ b/libraries/shared/src/PhysicsSimulation.cpp @@ -31,11 +31,14 @@ PhysicsSimulation::PhysicsSimulation() : _collisionList(MAX_COLLISIONS_PER_SIMUL } PhysicsSimulation::~PhysicsSimulation() { + // entities have a backpointer to this simulator that must be cleaned up int numEntities = _entities.size(); for (int i = 0; i < numEntities; ++i) { _entities[i]->_simulation = NULL; } _entities.clear(); + + // but Ragdolls do not _dolls.clear(); }