diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 42ab178978..d6857de337 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -112,8 +112,8 @@ void EntityMotionState::setWorldTransform(const btTransform& worldTrans) { } if (_movingStepsWithoutSimulationOwner > 100) { // XXX maybe meters from our characterController ? - qDebug() << "XXX XXX XXX -- claiming something I saw moving"; - setShouldClaimSimulationOwnership(true); + // qDebug() << "XXX XXX XXX -- claiming something I saw moving"; + // setShouldClaimSimulationOwnership(true); } #ifdef WANT_DEBUG @@ -406,6 +406,16 @@ uint32_t EntityMotionState::getAndClearIncomingDirtyFlags() const { return dirtyFlags; } + +// virtual +QUuid EntityMotionState::getSimulatorID() const { + if (_entity) { + return _entity->getSimulatorID(); + } + return QUuid(); +} + + // virtual void EntityMotionState::bump() { setShouldClaimSimulationOwnership(true); diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 737dc5b81c..49aead0050 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -68,6 +68,7 @@ public: virtual const QUuid& getObjectID() const { return _entity->getID(); } + virtual QUuid getSimulatorID() const; virtual void bump(); EntityItem* getEntity() const { return _entity; } diff --git a/libraries/physics/src/ObjectMotionState.h b/libraries/physics/src/ObjectMotionState.h index 9d04f3e0c4..98d5b8e707 100644 --- a/libraries/physics/src/ObjectMotionState.h +++ b/libraries/physics/src/ObjectMotionState.h @@ -116,6 +116,7 @@ public: virtual const QUuid& getObjectID() const = 0; + virtual QUuid getSimulatorID() const = 0; virtual void bump() = 0; friend class PhysicsEngine; diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index df1d6c6cee..c5f816424a 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -255,13 +255,13 @@ void PhysicsEngine::doOwnershipInfection(const btCollisionObject* objectA, const ObjectMotionState* a = static_cast(objectA->getUserPointer()); ObjectMotionState* b = static_cast(objectB->getUserPointer()); - if (b && ((a && !objectA->isStaticObject()) || (objectA == characterObject))) { + if (b && ((a && a->getSimulatorID() == _sessionID && !objectA->isStaticObject()) || (objectA == characterObject))) { // NOTE: we might own the simulation of a kinematic object (A) // but we don't claim ownership of kinematic objects (B) based on collisions here. if (!objectB->isStaticOrKinematicObject()) { b->bump(); } - } else if (a && ((b && !objectB->isStaticObject()) || (objectB == characterObject))) { + } else if (a && ((b && b->getSimulatorID() == _sessionID && !objectB->isStaticObject()) || (objectB == characterObject))) { // SIMILARLY: we might own the simulation of a kinematic object (B) // but we don't claim ownership of kinematic objects (A) based on collisions here. if (!objectA->isStaticOrKinematicObject()) {