From 2435e160a8f255b3687cb83d29da247270d9096b Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 5 Jan 2016 16:56:24 -0800 Subject: [PATCH 1/5] only emit collision events if you're the owner --- .../src/EntityTreeRenderer.cpp | 39 ++++++++++++++----- .../src/EntityTreeRenderer.h | 3 ++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 0bb0de1ce0..07d9031f41 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -717,11 +717,11 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, const } } -void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree, - const EntityItemID& id, const Collision& collision) { +bool EntityTreeRenderer::isCollisionOwner(const QUuid& myNodeID, EntityTreePointer entityTree, + const EntityItemID& id, const Collision& collision) { EntityItemPointer entity = entityTree->findEntityByEntityItemID(id); if (!entity) { - return; + return false; } QUuid simulatorID = entity->getSimulatorID(); if (simulatorID.isNull()) { @@ -730,14 +730,30 @@ void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityT const EntityItemID& otherID = (id == collision.idA) ? collision.idB : collision.idA; EntityItemPointer otherEntity = entityTree->findEntityByEntityItemID(otherID); if (!otherEntity) { - return; + return false; } simulatorID = otherEntity->getSimulatorID(); } if (simulatorID.isNull() || (simulatorID != myNodeID)) { - return; // Only one injector per simulation, please. + return false; } + + return true; +} + +void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree, + const EntityItemID& id, const Collision& collision) { + + if (!isCollisionOwner(myNodeID, entityTree, id, collision)) { + return; + } + + EntityItemPointer entity = entityTree->findEntityByEntityItemID(id); + if (!entity) { + return; + } + const QString& collisionSoundURL = entity->getCollisionSoundURL(); if (collisionSoundURL.isEmpty()) { return; @@ -796,10 +812,15 @@ void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, cons playEntityCollisionSound(myNodeID, entityTree, idB, collision); // And now the entity scripts - emit collisionWithEntity(idA, idB, collision); - _entitiesScriptEngine->callEntityScriptMethod(idA, "collisionWithEntity", idB, collision); - emit collisionWithEntity(idB, idA, collision); - _entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, collision); + if (isCollisionOwner(myNodeID, entityTree, idA, collision)) { + emit collisionWithEntity(idA, idB, collision); + _entitiesScriptEngine->callEntityScriptMethod(idA, "collisionWithEntity", idB, collision); + } + + if (isCollisionOwner(myNodeID, entityTree, idA, collision)) { + emit collisionWithEntity(idB, idA, collision); + _entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, collision); + } } void EntityTreeRenderer::updateEntityRenderStatus(bool shouldRenderEntities) { diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index 2c205336c0..e2cd4fc2dd 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -148,6 +148,9 @@ private: bool _wantScripts; ScriptEngine* _entitiesScriptEngine; + bool isCollisionOwner(const QUuid& myNodeID, EntityTreePointer entityTree, + const EntityItemID& id, const Collision& collision); + void playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree, const EntityItemID& id, const Collision& collision); From edc132efcee885233409567dd9a3c3bfb6e8b4d3 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Wed, 6 Jan 2016 12:53:57 -0800 Subject: [PATCH 2/5] fix warning --- libraries/octree/src/OctreePacketData.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index a7f142defe..5380aaa6ce 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -699,7 +699,7 @@ int OctreePacketData::unpackDataFromBytes(const unsigned char *dataBytes, QVecto dataBytes += unpackOrientationQuatFromBytes(dataBytes, result[i]); } - return (dataBytes - start) + sizeof(uint16_t); + return (dataBytes - start) + (int)sizeof(uint16_t); } int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, QVector& result) { @@ -728,7 +728,7 @@ int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, QVecto bit = (bit + 1) % BITS_IN_BYTE; } - return (dataBytes - start) + sizeof(uint16_t); + return (dataBytes - start) + (int)sizeof(uint16_t); } int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, QByteArray& result) { From a5f618ef3356f996d4710747998b765ab01bd437 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Wed, 6 Jan 2016 12:54:14 -0800 Subject: [PATCH 3/5] include debug log in collision example --- examples/entityScripts/changeColorOnCollision.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/entityScripts/changeColorOnCollision.js b/examples/entityScripts/changeColorOnCollision.js index 69a14f4b52..59a8bd9700 100644 --- a/examples/entityScripts/changeColorOnCollision.js +++ b/examples/entityScripts/changeColorOnCollision.js @@ -16,5 +16,6 @@ this.collisionWithEntity = function(myID, otherID, collisionInfo) { Entities.editEntity(myID, { color: { red: getRandomInt(128,255), green: getRandomInt(128,255), blue: getRandomInt(128,255)} }); + print("collisionWithEntity() myID:" + myID + ", otherID:" + otherID); }; }) \ No newline at end of file From d4e039ea7afb9f61391e6e0335b290b1ea554811 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Wed, 6 Jan 2016 13:00:50 -0800 Subject: [PATCH 4/5] include debug log in collision example --- examples/entityScripts/changeColorOnCollision.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/entityScripts/changeColorOnCollision.js b/examples/entityScripts/changeColorOnCollision.js index 59a8bd9700..26349a3e09 100644 --- a/examples/entityScripts/changeColorOnCollision.js +++ b/examples/entityScripts/changeColorOnCollision.js @@ -17,5 +17,11 @@ this.collisionWithEntity = function(myID, otherID, collisionInfo) { Entities.editEntity(myID, { color: { red: getRandomInt(128,255), green: getRandomInt(128,255), blue: getRandomInt(128,255)} }); print("collisionWithEntity() myID:" + myID + ", otherID:" + otherID); + print(" collisionInfo.type:" + collisionInfo.type); + print(" collisionInfo.idA:" + collisionInfo.idA); + print(" collisionInfo.idB:" + collisionInfo.idA); + Vec3.print(" collisionInfo.penetration:", collisionInfo.penetration); + Vec3.print(" collisionInfo.contactPoint:", collisionInfo.contactPoint); + Vec3.print(" collisionInfo.velocityChange:", collisionInfo.velocityChange); }; }) \ No newline at end of file From 6ac8d081dc823328b9aa858728232466fa55eba6 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Wed, 6 Jan 2016 13:02:07 -0800 Subject: [PATCH 5/5] include debug log in collision example --- examples/entityScripts/changeColorOnCollision.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/entityScripts/changeColorOnCollision.js b/examples/entityScripts/changeColorOnCollision.js index 26349a3e09..f0fff4e7a3 100644 --- a/examples/entityScripts/changeColorOnCollision.js +++ b/examples/entityScripts/changeColorOnCollision.js @@ -19,7 +19,7 @@ print("collisionWithEntity() myID:" + myID + ", otherID:" + otherID); print(" collisionInfo.type:" + collisionInfo.type); print(" collisionInfo.idA:" + collisionInfo.idA); - print(" collisionInfo.idB:" + collisionInfo.idA); + print(" collisionInfo.idB:" + collisionInfo.idB); Vec3.print(" collisionInfo.penetration:", collisionInfo.penetration); Vec3.print(" collisionInfo.contactPoint:", collisionInfo.contactPoint); Vec3.print(" collisionInfo.velocityChange:", collisionInfo.velocityChange);