From bc57003cfb917b028e869a461b34e4f10537575a Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 29 May 2018 17:56:12 -0700 Subject: [PATCH] activate body before disconnecting action from entity --- libraries/physics/src/ObjectDynamic.cpp | 7 +++++++ libraries/physics/src/ObjectDynamic.h | 2 +- libraries/physics/src/PhysicsEngine.cpp | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libraries/physics/src/ObjectDynamic.cpp b/libraries/physics/src/ObjectDynamic.cpp index 3341025a8f..28323a8b92 100644 --- a/libraries/physics/src/ObjectDynamic.cpp +++ b/libraries/physics/src/ObjectDynamic.cpp @@ -159,6 +159,13 @@ void ObjectDynamic::removeFromSimulation(EntitySimulationPointer simulation) con simulation->removeDynamic(myID); } +void ObjectDynamic::setOwnerEntity(const EntityItemPointer ownerEntity) { + if (!ownerEntity) { + activateBody(); + } + _ownerEntity = ownerEntity; +} + EntityItemPointer ObjectDynamic::getEntityByID(EntityItemID entityID) const { EntityItemPointer ownerEntity; withReadLock([&]{ diff --git a/libraries/physics/src/ObjectDynamic.h b/libraries/physics/src/ObjectDynamic.h index 7fdf2e323a..bfee79aca9 100644 --- a/libraries/physics/src/ObjectDynamic.h +++ b/libraries/physics/src/ObjectDynamic.h @@ -33,7 +33,7 @@ public: virtual void removeFromSimulation(EntitySimulationPointer simulation) const override; virtual EntityItemWeakPointer getOwnerEntity() const override { return _ownerEntity; } - virtual void setOwnerEntity(const EntityItemPointer ownerEntity) override { _ownerEntity = ownerEntity; } + virtual void setOwnerEntity(const EntityItemPointer ownerEntity) override; virtual void invalidate() {}; diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index dc8e40cef0..21b5b38b13 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -776,7 +776,6 @@ void PhysicsEngine::removeDynamic(const QUuid dynamicID) { _objectDynamics.remove(dynamicID); foreach(btRigidBody* rigidBody, rigidBodies) { _objectDynamicsByBody[rigidBody].remove(dynamic->getID()); - rigidBody->activate(); } dynamic->invalidate(); }