diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index a4ec7b7636..83bc2184a8 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -466,9 +466,7 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& }); } }); - if (entityFound) { - queueEntityMessage(PacketType::EntityEdit, entityID, properties); - } else { + if (!entityFound) { // attempt to get a name for the mystery ID QString name = "unknown"; QSharedPointer parentFinder = DependencyManager::get(); @@ -478,13 +476,18 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& if (success) { auto nestable = nestableWP.lock(); if (nestable) { - name = nestable->getName(); + NestableType nestableType = nestable->getNestableType(); + if (nestableType == NestableType::Overlay || nestableType == NestableType::Avatar) { + qCWarning(entities) << "attempted edit on non-entity: " << id << name; + return QUuid(); // null UUID to indicate failure + } } } } - qCWarning(entities) << "attempted edit on unknown entity: " << id << name; - return QUuid(); // null UUID to indicate failure } + // we queue edit packets even if we don't know about the entity. This is to allow AC agents + // to edit entities they know only by ID. + queueEntityMessage(PacketType::EntityEdit, entityID, properties); return id; } @@ -1535,6 +1538,24 @@ bool EntityScriptingInterface::isChildOfParent(QUuid childID, QUuid parentID) { return isChild; } +QString EntityScriptingInterface::getNestableType(QUuid id) { + QSharedPointer parentFinder = DependencyManager::get(); + if (!parentFinder) { + return "unknown"; + } + bool success; + SpatiallyNestableWeakPointer objectWP = parentFinder->find(id, success); + if (!success) { + return "unknown"; + } + SpatiallyNestablePointer object = objectWP.lock(); + if (!object) { + return "unknown"; + } + NestableType nestableType = object->getNestableType(); + return SpatiallyNestable::nestableTypeToString(nestableType); +} + QVector EntityScriptingInterface::getChildrenIDsOfJoint(const QUuid& parentID, int jointIndex) { QVector result; if (!_entityTree) { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index b25764790e..f5656860e3 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -304,6 +304,8 @@ public slots: Q_INVOKABLE QVector getChildrenIDsOfJoint(const QUuid& parentID, int jointIndex); Q_INVOKABLE bool isChildOfParent(QUuid childID, QUuid parentID); + Q_INVOKABLE QString getNestableType(QUuid id); + Q_INVOKABLE QUuid getKeyboardFocusEntity() const; Q_INVOKABLE void setKeyboardFocusEntity(QUuid id);