lock when reading or writing _actionsToAdd or _actionsToRemove

This commit is contained in:
Seth Alves 2015-06-22 07:19:40 -07:00
parent 03a2d190b0
commit c14276145d
2 changed files with 8 additions and 5 deletions

View file

@ -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<QUuid> 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<QUuid> 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

View file

@ -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();
}