History

add parameter to unload to remove entityID from map

Stephen Birarda committed 9 years ago

Commit 0c657a11 parent 546f3244 files · +14 −17Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 4 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+10−13
@@ -541,16 +541,6 @@ void ScriptEngine::init() { · 540 unmodified lines
541541
542542 auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
543543 entityScriptingInterface->init();
544− connect(entityScriptingInterface.data(), &EntityScriptingInterface::deletingEntity, this, [this](const EntityItemID& entityID) {
545− if (_entityScripts.contains(entityID)) {
546− if (isEntityScriptRunning(entityID)) {
547− qCWarning(scriptengine) << "deletingEntity while entity script is still running!" << entityID;
548− }
549− _entityScripts.remove(entityID);
550− emit entityScriptDetailsUpdated();
551− }
552− });
553−
554544
555545 // register various meta-types
556546 registerMetaTypes(this);
@@ -1844,7 +1834,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 1287 unmodified lines
18441834 processDeferredEntityLoads(entityScript, entityID);
18451835 }
18461836
1847−void ScriptEngine::unloadEntityScript(const EntityItemID& entityID) {
1837+void ScriptEngine::unloadEntityScript(const EntityItemID& entityID, bool shouldRemoveFromMap) {
18481838 if (QThread::currentThread() != thread()) {
18491839 #ifdef THREAD_DEBUGGING
18501840 qCDebug(scriptengine) << "*** WARNING *** ScriptEngine::unloadEntityScript() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
@@ -1852,7 +1842,8 @@ void ScriptEngine::unloadEntityScript(const EntityItemID& entityID) { · 1 unmodified line
18521842 #endif
18531843
18541844 QMetaObject::invokeMethod(this, "unloadEntityScript",
1855− Q_ARG(const EntityItemID&, entityID));
1845+ Q_ARG(const EntityItemID&, entityID),
1846+ Q_ARG(bool, shouldRemoveFromMap));
18561847 return;
18571848 }
18581849 #ifdef THREAD_DEBUGGING
@@ -1867,7 +1858,12 @@ void ScriptEngine::unloadEntityScript(const EntityItemID& entityID) { · 8 unmodified lines
18671858 } else {
18681859 qCDebug(scriptengine) << "unload called while !running" << entityID << oldDetails.status;
18691860 }
1870− if (oldDetails.status != EntityScriptStatus::UNLOADED) {
1861+
1862+ if (shouldRemoveFromMap) {
1863+ // this was a deleted entity, we've been asked to remove it from the map
1864+ _entityScripts.remove(entityID);
1865+ emit entityScriptDetailsUpdated();
1866+ } else if (oldDetails.status != EntityScriptStatus::UNLOADED) {
18711867 EntityScriptDetails newDetails;
18721868 newDetails.status = EntityScriptStatus::UNLOADED;
18731869 newDetails.lastModified = QDateTime::currentMSecsSinceEpoch();
@@ -1875,6 +1871,7 @@ void ScriptEngine::unloadEntityScript(const EntityItemID& entityID) { · 1 unmodified line
18751871 newDetails.scriptText = oldDetails.scriptText;
18761872 setEntityScriptDetails(entityID, newDetails);
18771873 }
1874+
18781875 stopAllTimersForEntityScript(entityID);
18791876 {
18801877 // FIXME: shouldn't have to do this here, but currently something seems to be firing unloads moments after firing initial load requests