From bfa0e9c2346a5d0c04ede930e9bfbf4605fb00d3 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 27 May 2015 14:44:23 -0700 Subject: [PATCH 1/2] recreate PR #4973 with some additional changes -- removed const keyword from qinvokables for avatar getter methods such as getVelocity --- interface/src/avatar/Avatar.h | 6 +++--- interface/src/avatar/AvatarMotionState.cpp | 6 +++--- interface/src/avatar/AvatarMotionState.h | 6 +++--- libraries/avatars/src/AvatarData.h | 2 +- libraries/physics/src/EntityMotionState.h | 6 +++--- libraries/physics/src/ObjectMotionState.h | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 0cdaf36099..3c784fb925 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -147,9 +147,9 @@ public: Q_INVOKABLE glm::vec3 getNeckPosition() const; - Q_INVOKABLE const glm::vec3& getAcceleration() const { return _acceleration; } - Q_INVOKABLE const glm::vec3& getAngularVelocity() const { return _angularVelocity; } - Q_INVOKABLE const glm::vec3& getAngularAcceleration() const { return _angularAcceleration; } + Q_INVOKABLE glm::vec3 getAcceleration() const { return _acceleration; } + Q_INVOKABLE glm::vec3 getAngularVelocity() const { return _angularVelocity; } + Q_INVOKABLE glm::vec3 getAngularAcceleration() const { return _angularAcceleration; } /// Scales a world space position vector relative to the avatar position and scale diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index 03a49c069e..530225b319 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -123,17 +123,17 @@ glm::quat AvatarMotionState::getObjectRotation() const { } // virtual -const glm::vec3& AvatarMotionState::getObjectLinearVelocity() const { +glm::vec3 AvatarMotionState::getObjectLinearVelocity() const { return _avatar->getVelocity(); } // virtual -const glm::vec3& AvatarMotionState::getObjectAngularVelocity() const { +glm::vec3 AvatarMotionState::getObjectAngularVelocity() const { return _avatar->getAngularVelocity(); } // virtual -const glm::vec3& AvatarMotionState::getObjectGravity() const { +glm::vec3 AvatarMotionState::getObjectGravity() const { return _avatar->getAcceleration(); } diff --git a/interface/src/avatar/AvatarMotionState.h b/interface/src/avatar/AvatarMotionState.h index a4fc9db20a..68c687d65b 100644 --- a/interface/src/avatar/AvatarMotionState.h +++ b/interface/src/avatar/AvatarMotionState.h @@ -48,9 +48,9 @@ public: virtual glm::vec3 getObjectPosition() const; virtual glm::quat getObjectRotation() const; - virtual const glm::vec3& getObjectLinearVelocity() const; - virtual const glm::vec3& getObjectAngularVelocity() const; - virtual const glm::vec3& getObjectGravity() const; + virtual glm::vec3 getObjectLinearVelocity() const; + virtual glm::vec3 getObjectAngularVelocity() const; + virtual glm::vec3 getObjectGravity() const; virtual const QUuid& getObjectID() const; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 603b5d76ea..a27e4256ef 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -301,7 +301,7 @@ public: int getReceiveRate() const; void setVelocity(const glm::vec3 velocity) { _velocity = velocity; } - Q_INVOKABLE const glm::vec3& getVelocity() const { return _velocity; } + Q_INVOKABLE glm::vec3 getVelocity() const { return _velocity; } const glm::vec3& getTargetVelocity() const { return _targetVelocity; } bool shouldDie() const { return _owningAvatarMixer.isNull() || getUsecsSinceLastUpdate() > AVATAR_SILENCE_THRESHOLD_USECS; } diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 80b56ccf2a..65279dc01a 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -61,9 +61,9 @@ public: virtual glm::vec3 getObjectPosition() const { return _entity->getPosition() - ObjectMotionState::getWorldOffset(); } virtual glm::quat getObjectRotation() const { return _entity->getRotation(); } - virtual const glm::vec3& getObjectLinearVelocity() const { return _entity->getVelocity(); } - virtual const glm::vec3& getObjectAngularVelocity() const { return _entity->getAngularVelocity(); } - virtual const glm::vec3& getObjectGravity() const { return _entity->getGravity(); } + virtual glm::vec3 getObjectLinearVelocity() const { return _entity->getVelocity(); } + virtual glm::vec3 getObjectAngularVelocity() const { return _entity->getAngularVelocity(); } + virtual glm::vec3 getObjectGravity() const { return _entity->getGravity(); } virtual const QUuid& getObjectID() const { return _entity->getID(); } diff --git a/libraries/physics/src/ObjectMotionState.h b/libraries/physics/src/ObjectMotionState.h index 337f09e719..246ed16627 100644 --- a/libraries/physics/src/ObjectMotionState.h +++ b/libraries/physics/src/ObjectMotionState.h @@ -112,9 +112,9 @@ public: virtual glm::vec3 getObjectPosition() const = 0; virtual glm::quat getObjectRotation() const = 0; - virtual const glm::vec3& getObjectLinearVelocity() const = 0; - virtual const glm::vec3& getObjectAngularVelocity() const = 0; - virtual const glm::vec3& getObjectGravity() const = 0; + virtual glm::vec3 getObjectLinearVelocity() const = 0; + virtual glm::vec3 getObjectAngularVelocity() const = 0; + virtual glm::vec3 getObjectGravity() const = 0; virtual const QUuid& getObjectID() const = 0; From 4fffe05b63fe583c78b40f6827e4b2db721a847e Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Wed, 27 May 2015 16:25:11 -0700 Subject: [PATCH 2/2] Play still sound for still objects and those just created in a script. --- .../entities-renderer/src/EntityTreeRenderer.cpp | 11 +++++++++++ libraries/entities/src/EntityScriptingInterface.cpp | 1 + 2 files changed, 12 insertions(+) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 7b25d20ef3..4a4fd4a0d7 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -1107,6 +1107,17 @@ void EntityTreeRenderer::playEntityCollisionSound(const QUuid& myNodeID, EntityT return; } QUuid simulatorID = entity->getSimulatorID(); + if (simulatorID.isNull()) { + // Can be null if it has never moved since being created or coming out of persistence. + // However, for there to be a collission, one of the two objects must be moving. + const EntityItemID& otherID = (id == collision.idA) ? collision.idB : collision.idA; + EntityItemPointer otherEntity = entityTree->findEntityByEntityItemID(otherID); + if (!otherEntity) { + return; + } + simulatorID = otherEntity->getSimulatorID(); + } + if (simulatorID.isNull() || (simulatorID != myNodeID)) { return; // Only one injector per simulation, please. } diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 7d286a3710..e652c77d78 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -83,6 +83,7 @@ QUuid EntityScriptingInterface::addEntity(const EntityItemProperties& properties entity->setLastBroadcast(usecTimestampNow()); // This Node is creating a new object. If it's in motion, set this Node as the simulator. bidForSimulationOwnership(propertiesWithSimID); + entity->setSimulatorID(propertiesWithSimID.getSimulatorID()); // and make note of it now, so we can act on it right away. } else { qCDebug(entities) << "script failed to add new Entity to local Octree"; success = false;