Exemple #1
0
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);
    }
}