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 | return EntityTree::textSize(id, text); | 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 | std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | 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 | void EntityScriptingInterface::callEntityMethod(const QUuid& id, const QString& method, const QStringList& params) { | 1058 | void EntityScriptingInterface::callEntityMethod(const QUuid& id, const QString& method, const QStringList& params) { |
| 1054 | PROFILE_RANGE(script_entities, __FUNCTION__); | 1059 | PROFILE_RANGE(script_entities, __FUNCTION__); |
| 1055 | 1060 | ||
| 1056 | std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | 1061 | auto entity = getEntityTree()->findEntityByEntityItemID(id); |
| 1057 | if (_entitiesScriptEngine) { | 1062 | if (entity) { |
| 1058 | EntityItemID entityID{ id }; | 1063 | std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); |
| 1059 | _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params); | 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 | params << paramString; | 1106 | params << paramString; |
| 1099 | } | 1107 | } |
| 1100 | 1108 | ||
| 1101 | std::lock_guard<std::recursive_mutex> lock(_entitiesScriptEngineLock); | 1109 | auto entity = getEntityTree()->findEntityByEntityItemID(entityID); |
| 1102 | if (_entitiesScriptEngine) { | 1110 | if (entity) { |
| 1103 | _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params, senderNode->getUUID()); | 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 | if (entitiesScriptEngine) { | 1343 | if (entitiesScriptEngine) { |
| 1332 | request->setFuture(entitiesScriptEngine->getLocalEntityScriptDetails(entityID)); | 1344 | request->setFuture(entitiesScriptEngine->getLocalEntityScriptDetails(entityID)); |
| 1333 | } | 1345 | } |
| 1334 | }); | 1346 | }, entityID); |
| 1335 | if (!request->isStarted()) { | 1347 | if (!request->isStarted()) { |
| 1336 | request->deleteLater(); | 1348 | request->deleteLater(); |
| 1337 | callScopedHandlerObject(handler, _engine->makeError("Entities Scripting Provider unavailable", "InternalError"), QScriptValue()); | 1349 | callScopedHandlerObject(handler, _engine->makeError("Entities Scripting Provider unavailable", "InternalError"), QScriptValue()); |