mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 15:09:24 +02:00
only emit collision events if you're the owner
This commit is contained in:
parent
5fad7aa51b
commit
2435e160a8
2 changed files with 33 additions and 9 deletions
|
@ -717,11 +717,11 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree,
|
bool EntityTreeRenderer::isCollisionOwner(const QUuid& myNodeID, EntityTreePointer entityTree,
|
||||||
const EntityItemID& id, const Collision& collision) {
|
const EntityItemID& id, const Collision& collision) {
|
||||||
EntityItemPointer entity = entityTree->findEntityByEntityItemID(id);
|
EntityItemPointer entity = entityTree->findEntityByEntityItemID(id);
|
||||||
if (!entity) {
|
if (!entity) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
QUuid simulatorID = entity->getSimulatorID();
|
QUuid simulatorID = entity->getSimulatorID();
|
||||||
if (simulatorID.isNull()) {
|
if (simulatorID.isNull()) {
|
||||||
|
@ -730,14 +730,30 @@ void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityT
|
||||||
const EntityItemID& otherID = (id == collision.idA) ? collision.idB : collision.idA;
|
const EntityItemID& otherID = (id == collision.idA) ? collision.idB : collision.idA;
|
||||||
EntityItemPointer otherEntity = entityTree->findEntityByEntityItemID(otherID);
|
EntityItemPointer otherEntity = entityTree->findEntityByEntityItemID(otherID);
|
||||||
if (!otherEntity) {
|
if (!otherEntity) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
simulatorID = otherEntity->getSimulatorID();
|
simulatorID = otherEntity->getSimulatorID();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (simulatorID.isNull() || (simulatorID != myNodeID)) {
|
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();
|
const QString& collisionSoundURL = entity->getCollisionSoundURL();
|
||||||
if (collisionSoundURL.isEmpty()) {
|
if (collisionSoundURL.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -796,10 +812,15 @@ void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, cons
|
||||||
playEntityCollisionSound(myNodeID, entityTree, idB, collision);
|
playEntityCollisionSound(myNodeID, entityTree, idB, collision);
|
||||||
|
|
||||||
// And now the entity scripts
|
// And now the entity scripts
|
||||||
emit collisionWithEntity(idA, idB, collision);
|
if (isCollisionOwner(myNodeID, entityTree, idA, collision)) {
|
||||||
_entitiesScriptEngine->callEntityScriptMethod(idA, "collisionWithEntity", idB, collision);
|
emit collisionWithEntity(idA, idB, collision);
|
||||||
emit collisionWithEntity(idB, idA, collision);
|
_entitiesScriptEngine->callEntityScriptMethod(idA, "collisionWithEntity", idB, collision);
|
||||||
_entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, collision);
|
}
|
||||||
|
|
||||||
|
if (isCollisionOwner(myNodeID, entityTree, idA, collision)) {
|
||||||
|
emit collisionWithEntity(idB, idA, collision);
|
||||||
|
_entitiesScriptEngine->callEntityScriptMethod(idB, "collisionWithEntity", idA, collision);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::updateEntityRenderStatus(bool shouldRenderEntities) {
|
void EntityTreeRenderer::updateEntityRenderStatus(bool shouldRenderEntities) {
|
||||||
|
|
|
@ -148,6 +148,9 @@ private:
|
||||||
bool _wantScripts;
|
bool _wantScripts;
|
||||||
ScriptEngine* _entitiesScriptEngine;
|
ScriptEngine* _entitiesScriptEngine;
|
||||||
|
|
||||||
|
bool isCollisionOwner(const QUuid& myNodeID, EntityTreePointer entityTree,
|
||||||
|
const EntityItemID& id, const Collision& collision);
|
||||||
|
|
||||||
void playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree,
|
void playEntityCollisionSound(const QUuid& myNodeID, EntityTreePointer entityTree,
|
||||||
const EntityItemID& id, const Collision& collision);
|
const EntityItemID& id, const Collision& collision);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue