From b30b9a0a3079a8c6d99a55cc54b03f5926350d33 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 16 Apr 2015 12:03:34 -0700 Subject: [PATCH] don't update _simulatorIDChangedTime unless the value is different than the current one. if a script changes an entity, attempt to claim ownership --- libraries/entities/src/EntityItem.cpp | 7 +++++++ libraries/entities/src/EntityItem.h | 2 +- .../entities/src/EntityScriptingInterface.cpp | 17 +++++++++++------ libraries/entities/src/EntityTree.cpp | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 2503e0e30d..e8427e0982 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1196,3 +1196,10 @@ void EntityItem::updateLifetime(float value) { _dirtyFlags |= EntityItem::DIRTY_LIFETIME; } } + +void EntityItem::setSimulatorID(const QString& value) { + if (_simulatorID != value) { + _simulatorID = value; + _simulatorIDChangedTime = usecTimestampNow(); + } +} diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 8391187860..124d37d762 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -256,7 +256,7 @@ public: void setUserData(const QString& value) { _userData = value; } QString getSimulatorID() const { return _simulatorID; } - void setSimulatorID(const QString& id) { _simulatorID = id; _simulatorIDChangedTime = usecTimestampNow(); } + void setSimulatorID(const QString& value); quint64 getSimulatorIDChangedTime() const { return _simulatorIDChangedTime; } const QString& getMarketplaceID() const { return _marketplaceID; } diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 06c5493720..fa142d3abd 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -66,13 +66,10 @@ EntityItemID EntityScriptingInterface::addEntity(const EntityItemProperties& pro uint32_t creatorTokenID = EntityItemID::getNextCreatorTokenID(); // This Node is creating a new object. If it's in motion, set this Node as the simulator. - auto nodeList = DependencyManager::get(); - const QString myNodeID = nodeList->getSessionUUID().toString(); - EntityItemProperties propertiesWithSimID = properties; - - // if this object is moving, set this Node as the simulation owner if (properties.velocityChanged() || properties.rotationChanged()) { + auto nodeList = DependencyManager::get(); + const QString myNodeID = nodeList->getSessionUUID().toString(); propertiesWithSimID.setSimulatorID(myNodeID); } @@ -148,12 +145,20 @@ EntityItemID EntityScriptingInterface::editEntity(EntityItemID entityID, const E entityID.isKnownID = true; } } + + // If this node is changing a physics-related property, claim simulation ownership + EntityItemProperties propertiesWithSimID = properties; + if (properties.velocityChanged() || properties.rotationChanged()) { + auto nodeList = DependencyManager::get(); + const QString myNodeID = nodeList->getSessionUUID().toString(); + propertiesWithSimID.setSimulatorID(myNodeID); + } // If we have a local entity tree set, then also update it. We can do this even if we don't know // the actual id, because we can edit out local entities just with creatorTokenID if (_entityTree) { _entityTree->lockForWrite(); - _entityTree->updateEntity(entityID, properties, canAdjustLocks()); + _entityTree->updateEntity(entityID, propertiesWithSimID, canAdjustLocks()); _entityTree->unlock(); } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index ff9d098c01..2227107537 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -136,7 +136,7 @@ bool EntityTree::updateEntityWithElement(EntityItem* entity, const EntityItemPro // 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 + if (now - entity->getSimulatorIDChangedTime() < 2 * USECS_PER_SECOND) { // XXX pick time and put in constant qDebug() << "TOO SOON"; } }