void PhysicsEngine::addAction(EntityActionPointer action) { assert(action); const QUuid& actionID = action->getID(); if (_objectActions.contains(actionID)) { if (_objectActions[actionID] == action) { return; } removeAction(action->getID()); } _objectActions[actionID] = action; // bullet needs a pointer to the action, but it doesn't use shared pointers. // is there a way to bump the reference count? ObjectAction* objectAction = static_cast<ObjectAction*>(action.get()); _dynamicsWorld->addAction(objectAction); }
void PhysicalEntitySimulation::addAction(EntityActionPointer action) { if (_physicsEngine) { lock(); const QUuid& actionID = action->getID(); if (_physicsEngine->getActionByID(actionID)) { qDebug() << "warning -- PhysicalEntitySimulation::addAction -- adding an action that was already in _physicsEngine"; } unlock(); EntitySimulation::addAction(action); } }
void PhysicalEntitySimulation::addAction(EntityActionPointer action) { if (_physicsEngine) { // FIXME put fine grain locking into _physicsEngine { QMutexLocker lock(&_mutex); const QUuid& actionID = action->getID(); if (_physicsEngine->getActionByID(actionID)) { qDebug() << "warning -- PhysicalEntitySimulation::addAction -- adding an action that was already in _physicsEngine"; } } EntitySimulation::addAction(action); } }