From df37b853f750e4433ac9c70c3f89c53a2c14ec29 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 16 Apr 2015 08:57:57 -0700 Subject: [PATCH] setup test of lockout-period oafter simulator-owner-id change --- libraries/entities/src/EntityItem.cpp | 2 ++ libraries/entities/src/EntityItem.h | 4 +++- libraries/entities/src/EntityTree.cpp | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index da98b4f350..2503e0e30d 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -75,6 +75,7 @@ EntityItem::EntityItem(const EntityItemID& entityItemID) { _dirtyFlags = 0; _changedOnServer = 0; _element = NULL; + _simulatorIDChangedTime = 0; initFromEntityItemID(entityItemID); } @@ -90,6 +91,7 @@ EntityItem::EntityItem(const EntityItemID& entityItemID, const EntityItemPropert _dirtyFlags = 0; _changedOnServer = 0; _element = NULL; + _simulatorIDChangedTime = 0; initFromEntityItemID(entityItemID); setProperties(properties); } diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 946efea39c..8391187860 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -256,7 +256,8 @@ public: void setUserData(const QString& value) { _userData = value; } QString getSimulatorID() const { return _simulatorID; } - void setSimulatorID(const QString& id) { _simulatorID = id; } + void setSimulatorID(const QString& id) { _simulatorID = id; _simulatorIDChangedTime = usecTimestampNow(); } + quint64 getSimulatorIDChangedTime() const { return _simulatorIDChangedTime; } const QString& getMarketplaceID() const { return _marketplaceID; } void setMarketplaceID(const QString& value) { _marketplaceID = value; } @@ -352,6 +353,7 @@ protected: bool _locked; QString _userData; QString _simulatorID; // id of Node which is currently responsible for simulating this Entity + quint64 _simulatorIDChangedTime; // when was _simulatorID last updated? QString _marketplaceID; // NOTE: Damping is applied like this: v *= pow(1 - damping, dt) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index fa53dd2dda..ff9d098c01 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -130,6 +130,17 @@ bool EntityTree::updateEntityWithElement(EntityItem* entity, const EntityItemPro } } } else { + if (properties.simulatorIDChanged() && + !entity->getSimulatorID().isEmpty() && + properties.getSimulatorID() != entity->getSimulatorID()) { + // A Node is trying to take ownership of the simulation of this entity from another Node. Only allow this + // if ownership hasn't recently changed. + quint64 now = usecTimestampNow(); + if (now - entity->getSimulatorIDChangedTime() < 0.1 * USECS_PER_SECOND) { // XXX pick time and put in constant + qDebug() << "TOO SOON"; + } + } + QString entityScriptBefore = entity->getScript(); uint32_t preFlags = entity->getDirtyFlags(); UpdateEntityOperator theOperator(this, containingElement, entity, properties);