Merge pull request #6779 from ZappoMan/onlyNotifyOwner

only emit collision events if you're the owner
This commit is contained in:
Brad Davis 2016-01-06 16:14:29 -05:00
commit 656a7da70a
4 changed files with 42 additions and 11 deletions

View file

@ -16,5 +16,12 @@
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.idB);
Vec3.print(" collisionInfo.penetration:", collisionInfo.penetration);
Vec3.print(" collisionInfo.contactPoint:", collisionInfo.contactPoint);
Vec3.print(" collisionInfo.velocityChange:", collisionInfo.velocityChange);
};
})

View file

@ -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) {

View file

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

View file

@ -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<float>& 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) {