Showing the changes to libraries/entities/src/EntityScriptingInterface.cpp (1 of 5 files). Show all
Unified · Split
| @@ -1045,18 +1045,26 @@ QSizeF EntityScriptingInterface::textSize(const QUuid& id, const QString& text) · 1044 unmodified lines | ||
| 1045 | 1045 | return EntityTree::textSize(id, text); |
| 1046 | 1046 | } |
| 1047 | 1047 | |
| 1048 | −void EntityScriptingInterface::setEntitiesScriptEngine(QSharedPointer<EntitiesScriptEngineProvider> engine) { | |
| 1048 | +void EntityScriptingInterface::setPersistentEntitiesScriptEngine(QSharedPointer<EntitiesScriptEngineProvider> engine) { | |
| 1049 | 1049 | std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); |
| 1050 | − _entitiesScriptEngine = engine; | |
| 1050 | + _persistentEntitiesScriptEngine = engine; | |
| 1051 | +} | |
| 1052 | + | |
| 1053 | +void EntityScriptingInterface::setNonPersistentEntitiesScriptEngine(QSharedPointer<EntitiesScriptEngineProvider> engine) { | |
| 1054 | + std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | |
| 1055 | + _nonPersistentEntitiesScriptEngine = engine; | |
| 1051 | 1056 | } |
| 1052 | 1057 | |
| 1053 | 1058 | void EntityScriptingInterface::callEntityMethod(const QUuid& id, const QString& method, const QStringList& params) { |
| 1054 | 1059 | PROFILE_RANGE(script_entities, __FUNCTION__); |
| 1055 | − | |
| 1056 | − std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | |
| 1057 | − if (_entitiesScriptEngine) { | |
| 1058 | − EntityItemID entityID{ id }; | |
| 1059 | − _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params); | |
| 1060 | + | |
| 1061 | + auto entity = getEntityTree()->findEntityByEntityItemID(id); | |
| 1062 | + if (entity) { | |
| 1063 | + std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | |
| 1064 | + auto& scriptEngine = (entity->isLocalEntity() || entity->isMyAvatarEntity()) ? _persistentEntitiesScriptEngine : _nonPersistentEntitiesScriptEngine; | |
| 1065 | + if (scriptEngine) { | |
| 1066 | + scriptEngine->callEntityScriptMethod(id, method, params); | |
| 1067 | + } | |
| 1060 | 1068 | } |
| 1061 | 1069 | } |
| 1062 | 1070 | |
| @@ -1098,9 +1106,13 @@ void EntityScriptingInterface::handleEntityScriptCallMethodPacket(QSharedPointer · 35 unmodified lines | ||
| 1098 | 1106 | params << paramString; |
| 1099 | 1107 | } |
| 1100 | 1108 | |
| 1101 | − std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | |
| 1102 | − if (_entitiesScriptEngine) { | |
| 1103 | − _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params, senderNode->getUUID()); | |
| 1109 | + auto entity = getEntityTree()->findEntityByEntityItemID(entityID); | |
| 1110 | + if (entity) { | |
| 1111 | + std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | |
| 1112 | + auto& scriptEngine = (entity->isLocalEntity() || entity->isMyAvatarEntity()) ? _persistentEntitiesScriptEngine : _nonPersistentEntitiesScriptEngine; | |
| 1113 | + if (scriptEngine) { | |
| 1114 | + scriptEngine->callEntityScriptMethod(entityID, method, params, senderNode->getUUID()); | |
| 1115 | + } | |
| 1104 | 1116 | } |
| 1105 | 1117 | } |
| 1106 | 1118 | } |
| @@ -1331,7 +1343,7 @@ bool EntityPropertyMetadataRequest::script(EntityItemID entityID, QScriptValue h · 224 unmodified lines | ||
| 1331 | 1343 | if (entitiesScriptEngine) { |
| 1332 | 1344 | request->setFuture(entitiesScriptEngine->getLocalEntityScriptDetails(entityID)); |
| 1333 | 1345 | } |
| 1334 | − }); | |
| 1346 | + }, entityID); | |
| 1335 | 1347 | if (!request->isStarted()) { |
| 1336 | 1348 | request->deleteLater(); |
| 1337 | 1349 | callScopedHandlerObject(handler, _engine->makeError("Entities Scripting Provider unavailable", "InternalError"), QScriptValue()); |