diff --git a/libraries/entities/src/EntitySimulation.h b/libraries/entities/src/EntitySimulation.h index 7d244086e5..0aad55b268 100644 --- a/libraries/entities/src/EntitySimulation.h +++ b/libraries/entities/src/EntitySimulation.h @@ -57,10 +57,10 @@ public: friend class EntityTree; - virtual void addAction(EntityActionPointer action) { _actionsToAdd += action; } - virtual void removeAction(const QUuid actionID) { _actionsToRemove += actionID; } - virtual void removeActions(QList actionIDsToRemove) { _actionsToRemove += actionIDsToRemove; } - virtual void applyActionChanges() { _actionsToAdd.clear(); _actionsToRemove.clear(); } + virtual void addAction(EntityActionPointer action) { lock(); _actionsToAdd += action; unlock(); } + virtual void removeAction(const QUuid actionID) { lock(); _actionsToRemove += actionID; unlock(); } + virtual void removeActions(QList actionIDsToRemove) { lock(); _actionsToRemove += actionIDsToRemove; unlock(); } + virtual void applyActionChanges() { lock(); _actionsToAdd.clear(); _actionsToRemove.clear(); unlock(); } protected: // these only called by the EntityTree? /// \param entity pointer to EntityItem to be added diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index c68b993fe2..506e5fb67e 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -237,12 +237,15 @@ void PhysicalEntitySimulation::handleCollisionEvents(CollisionEvents& collisionE void PhysicalEntitySimulation::applyActionChanges() { if (_physicsEngine) { + lock(); foreach (EntityActionPointer actionToAdd, _actionsToAdd) { _physicsEngine->addAction(actionToAdd); } + _actionsToAdd.clear(); foreach (QUuid actionToRemove, _actionsToRemove) { _physicsEngine->removeAction(actionToRemove); } + _actionsToRemove.clear(); + unlock(); } - EntitySimulation::applyActionChanges(); }