From 4ed8a1e5d116a663bdf3e0642e21a239548999d1 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 6 Nov 2015 09:25:53 -0800 Subject: [PATCH] changes to send an update to entity-server when AvatarActionHold releases an entity --- interface/src/avatar/AvatarActionHold.h | 2 +- libraries/entities/src/EntityTree.cpp | 18 ++++++++++++++++-- libraries/entities/src/EntityTree.h | 1 + libraries/physics/src/EntityMotionState.cpp | 11 ++++++++--- libraries/physics/src/EntityMotionState.h | 2 +- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/interface/src/avatar/AvatarActionHold.h b/interface/src/avatar/AvatarActionHold.h index 6badf97e9e..95623d5046 100644 --- a/interface/src/avatar/AvatarActionHold.h +++ b/interface/src/avatar/AvatarActionHold.h @@ -30,7 +30,7 @@ public: QByteArray serialize() const; virtual void deserialize(QByteArray serializedArguments); - virtual bool shouldSuppressLocationEdits() { return true; } + virtual bool shouldSuppressLocationEdits() { return _active && !_ownerEntity.expired(); } private: static const uint16_t holdVersion; diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 24c13ae28e..8e32158362 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -611,6 +611,16 @@ EntityItemPointer EntityTree::findEntityByEntityItemID(const EntityItemID& entit return foundEntity; } +void EntityTree::fixupTerseEditLogging(EntityItemProperties& properties, QList& changedProperties) { + if (properties.simulationOwnerChanged()) { + int simIndex = changedProperties.indexOf("simulationOwner"); + if (simIndex >= 0) { + SimulationOwner simOwner = properties.getSimulationOwner(); + changedProperties[simIndex] = QString("simulationOwner:") + QString::number((int)simOwner.getPriority()); + } + } +} + int EntityTree::processEditPacketData(NLPacket& packet, const unsigned char* editData, int maxLength, const SharedNodePointer& senderNode) { @@ -661,7 +671,9 @@ int EntityTree::processEditPacketData(NLPacket& packet, const unsigned char* edi qCDebug(entities) << " properties:" << properties; } if (wantTerseEditLogging()) { - qCDebug(entities) << "edit" << entityItemID.toString() << properties.listChangedProperties(); + QList changedProperties = properties.listChangedProperties(); + fixupTerseEditLogging(properties, changedProperties); + qCDebug(entities) << "edit" << entityItemID.toString() << changedProperties; } endLogging = usecTimestampNow(); @@ -689,7 +701,9 @@ int EntityTree::processEditPacketData(NLPacket& packet, const unsigned char* edi qCDebug(entities) << " properties:" << properties; } if (wantTerseEditLogging()) { - qCDebug(entities) << "add" << entityItemID.toString() << properties.listChangedProperties(); + QList changedProperties = properties.listChangedProperties(); + fixupTerseEditLogging(properties, changedProperties); + qCDebug(entities) << "add" << entityItemID.toString() << changedProperties; } endLogging = usecTimestampNow(); diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 1957787a60..c177840199 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -77,6 +77,7 @@ public: virtual bool canProcessVersion(PacketVersion thisVersion) const { return thisVersion >= VERSION_ENTITIES_USE_METERS_AND_RADIANS; } virtual bool handlesEditPacketType(PacketType packetType) const; + void fixupTerseEditLogging(EntityItemProperties& properties, QList& changedProperties); virtual int processEditPacketData(NLPacket& packet, const unsigned char* editData, int maxLength, const SharedNodePointer& senderNode); diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 42aaea33c2..c8a0f87b6d 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -79,8 +79,13 @@ EntityMotionState::~EntityMotionState() { assert(!_entity); } -void EntityMotionState::updateServerPhysicsVariables() { +void EntityMotionState::updateServerPhysicsVariables(const QUuid& sessionID) { assert(entityTreeIsLocked()); + if (_entity->getSimulatorID() == sessionID) { + // don't slam these values if we are the simulation owner + return; + } + _serverPosition = _entity->getPosition(); _serverRotation = _entity->getRotation(); _serverVelocity = _entity->getVelocity(); @@ -92,7 +97,7 @@ void EntityMotionState::updateServerPhysicsVariables() { // virtual bool EntityMotionState::handleEasyChanges(uint32_t flags, PhysicsEngine* engine) { assert(entityTreeIsLocked()); - updateServerPhysicsVariables(); + updateServerPhysicsVariables(engine->getSessionID()); ObjectMotionState::handleEasyChanges(flags, engine); if (flags & Simulation::DIRTY_SIMULATOR_ID) { @@ -129,7 +134,7 @@ bool EntityMotionState::handleEasyChanges(uint32_t flags, PhysicsEngine* engine) // virtual bool EntityMotionState::handleHardAndEasyChanges(uint32_t flags, PhysicsEngine* engine) { - updateServerPhysicsVariables(); + updateServerPhysicsVariables(engine->getSessionID()); return ObjectMotionState::handleHardAndEasyChanges(flags, engine); } diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index f3a2e80070..188e7096b9 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -28,7 +28,7 @@ public: EntityMotionState(btCollisionShape* shape, EntityItemPointer item); virtual ~EntityMotionState(); - void updateServerPhysicsVariables(); + void updateServerPhysicsVariables(const QUuid& sessionID); virtual bool handleEasyChanges(uint32_t flags, PhysicsEngine* engine); virtual bool handleHardAndEasyChanges(uint32_t flags, PhysicsEngine* engine);