From d7be1699a7f0d5e13e735029f2b9996daf69194f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 12 Nov 2015 15:27:10 -0800 Subject: [PATCH] adjust how the decision to send action changes over the wire is made --- interface/src/avatar/AvatarActionHold.cpp | 3 ++- libraries/entities/src/EntityItem.cpp | 8 +++++--- libraries/entities/src/EntityItem.h | 14 ++++++++++---- libraries/physics/src/EntityMotionState.cpp | 3 ++- libraries/physics/src/ObjectActionOffset.cpp | 3 ++- libraries/physics/src/ObjectActionSpring.cpp | 3 ++- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index 0d86e79a2d..839f2d4fbb 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -211,7 +211,8 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { auto ownerEntity = _ownerEntity.lock(); if (ownerEntity) { - ownerEntity->setActionDataNeedsUpdate(true); + ownerEntity->setActionDataDirty(true); + ownerEntity->setActionDataNeedsTransmit(true); } }); activateBody(); diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index ef39cf8063..807186a304 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1740,6 +1740,8 @@ void EntityItem::deserializeActionsInternal() { } } + _actionDataDirty = true; + return; } @@ -1800,11 +1802,11 @@ void EntityItem::serializeActions(bool& success, QByteArray& result) const { } const QByteArray EntityItem::getActionDataInternal() const { - if (_actionDataNeedsUpdate) { + if (_actionDataDirty) { bool success; serializeActions(success, _allActionsDataCache); if (success) { - _actionDataNeedsUpdate = false; + _actionDataDirty = false; } } return _allActionsDataCache; @@ -1814,7 +1816,7 @@ const QByteArray EntityItem::getActionData() const { QByteArray result; assertUnlocked(); - if (_actionDataNeedsUpdate) { + if (_actionDataDirty) { withWriteLock([&] { getActionDataInternal(); result = _allActionsDataCache; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 6e4f3ac2ca..5b47198e97 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -408,8 +408,13 @@ public: QList getActionIDs() { return _objectActions.keys(); } QVariantMap getActionArguments(const QUuid& actionID) const; void deserializeActions(); - void setActionDataNeedsUpdate(bool value) const { _actionDataNeedsUpdate = value; } - bool actionDataNeedsUpdate() const { return _actionDataNeedsUpdate; } + + void setActionDataDirty(bool value) const { _actionDataDirty = value; } + bool actionDataDirty() const { return _actionDataDirty; } + + void setActionDataNeedsTransmit(bool value) const { _actionDataNeedsTransmit = value; } + bool actionDataNeedsTransmit() const { return _actionDataNeedsTransmit; } + bool shouldSuppressLocationEdits() const; void setSourceUUID(const QUuid& sourceUUID) { _sourceUUID = sourceUUID; } @@ -442,7 +447,7 @@ protected: mutable bool _recalcAABox = true; mutable bool _recalcMinAACube = true; mutable bool _recalcMaxAACube = true; - + float _glowLevel; float _localRenderAlpha; float _density = ENTITY_ITEM_DEFAULT_DENSITY; // kg/m^3 @@ -512,7 +517,8 @@ protected: // are used to keep track of and work around this situation. void checkWaitingToRemove(EntitySimulation* simulation = nullptr); mutable QSet _actionsToRemove; - mutable bool _actionDataNeedsUpdate = false; + mutable bool _actionDataDirty = false; + mutable bool _actionDataNeedsTransmit = false; // _previouslyDeletedActions is used to avoid an action being re-added due to server round-trip lag static quint64 _rememberDeletedActionTime; mutable QHash _previouslyDeletedActions; diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 841a41cb04..03e1c1c5b7 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -297,8 +297,9 @@ bool EntityMotionState::remoteSimulationOutOfSync(uint32_t simulationStep) { _serverPosition += dt * _serverVelocity; } - if (_entity->actionDataNeedsUpdate()) { + if (_entity->actionDataNeedsTransmit()) { setOutgoingPriority(SCRIPT_EDIT_SIMULATION_PRIORITY); + _entity->setActionDataNeedsTransmit(false); return true; } diff --git a/libraries/physics/src/ObjectActionOffset.cpp b/libraries/physics/src/ObjectActionOffset.cpp index be2f5b40a0..5c2999a0a1 100644 --- a/libraries/physics/src/ObjectActionOffset.cpp +++ b/libraries/physics/src/ObjectActionOffset.cpp @@ -129,7 +129,8 @@ bool ObjectActionOffset::updateArguments(QVariantMap arguments) { auto ownerEntity = _ownerEntity.lock(); if (ownerEntity) { - ownerEntity->setActionDataNeedsUpdate(true); + ownerEntity->setActionDataDirty(true); + ownerEntity->setActionDataNeedsTransmit(true); } }); activateBody(); diff --git a/libraries/physics/src/ObjectActionSpring.cpp b/libraries/physics/src/ObjectActionSpring.cpp index 7289c88a8f..d9d6a323a7 100644 --- a/libraries/physics/src/ObjectActionSpring.cpp +++ b/libraries/physics/src/ObjectActionSpring.cpp @@ -162,7 +162,8 @@ bool ObjectActionSpring::updateArguments(QVariantMap arguments) { auto ownerEntity = _ownerEntity.lock(); if (ownerEntity) { - ownerEntity->setActionDataNeedsUpdate(true); + ownerEntity->setActionDataDirty(true); + ownerEntity->setActionDataNeedsTransmit(true); } }); activateBody();