Showing the changes to libraries/script-engine/src/ScriptManager.cpp (1 of 18 files). Show all
Unified · Split
| @@ -265,6 +265,11 @@ ScriptManager::ScriptManager(Context context, const QString& scriptContents, con · 264 unmodified lines | ||
| 265 | 265 | _scriptContents(scriptContents), |
| 266 | 266 | _timerFunctionMap(), |
| 267 | 267 | _fileNameString(fileNameString), |
| 268 | + _quatLibrary(new Quat()), | |
| 269 | + _vec3Library(new Vec3()), | |
| 270 | + _mat4Library(new Mat4()), | |
| 271 | + _uuidLibrary(new ScriptUUID()), | |
| 272 | + _consoleScriptingInterface(new ConsoleScriptingInterface()), | |
| 268 | 273 | _assetScriptingInterface(new AssetScriptingInterface(this)) |
| 269 | 274 | { |
| 270 | 275 | |
| @@ -377,10 +382,20 @@ bool ScriptManager::isDebugMode() const { · 106 unmodified lines | ||
| 377 | 382 | } |
| 378 | 383 | |
| 379 | 384 | ScriptManager::~ScriptManager() { |
| 385 | + auto scopeGuard = engine()->getScopeGuard(); | |
| 380 | 386 | qDebug() << "ScriptManager::~ScriptManager() : Script manager deleted, type: " << _type << " name: " << _fileNameString; |
| 381 | 387 | if (_type == ScriptManager::Type::ENTITY_CLIENT) { |
| 382 | 388 | printf("ScriptManager::~ScriptManager"); |
| 383 | 389 | } |
| 390 | + // We need to make sure that these get deleted before the script engine. | |
| 391 | + _scriptingInterface.reset(); | |
| 392 | + _quatLibrary.reset(); | |
| 393 | + _vec3Library.reset(); | |
| 394 | + _mat4Library.reset(); | |
| 395 | + _uuidLibrary.reset(); | |
| 396 | + _consoleScriptingInterface.reset(); | |
| 397 | + _assetScriptingInterface.reset(); | |
| 398 | + _returnValue = ScriptValue(); | |
| 384 | 399 | _isDeleted = true; |
| 385 | 400 | } |
| 386 | 401 | |
| @@ -804,17 +819,17 @@ void ScriptManager::init() { · 417 unmodified lines | ||
| 804 | 819 | |
| 805 | 820 | scriptEngine->registerEnum("Script.ExternalPaths", QMetaEnum::fromType<ExternalResource::Bucket>()); |
| 806 | 821 | |
| 807 | − scriptEngine->registerGlobalObject("Quat", &_quatLibrary); | |
| 808 | − scriptEngine->registerGlobalObject("Vec3", &_vec3Library); | |
| 809 | − scriptEngine->registerGlobalObject("Mat4", &_mat4Library); | |
| 810 | − scriptEngine->registerGlobalObject("Uuid", &_uuidLibrary); | |
| 822 | + scriptEngine->registerGlobalObject("Quat", _quatLibrary.get()); | |
| 823 | + scriptEngine->registerGlobalObject("Vec3", _vec3Library.get()); | |
| 824 | + scriptEngine->registerGlobalObject("Mat4", _mat4Library.get()); | |
| 825 | + scriptEngine->registerGlobalObject("Uuid", _uuidLibrary.get()); | |
| 811 | 826 | |
| 812 | 827 | if (_context != NETWORKLESS_TEST_SCRIPT) { |
| 813 | 828 | // This requires networking, we want to avoid the need for it in test scripts |
| 814 | 829 | scriptEngine->registerGlobalObject("Messages", DependencyManager::get<MessagesClient>().data()); |
| 815 | 830 | } |
| 816 | 831 | |
| 817 | − scriptEngine->registerGlobalObject("console", &_consoleScriptingInterface); | |
| 832 | + scriptEngine->registerGlobalObject("console", _consoleScriptingInterface.get()); | |
| 818 | 833 | scriptEngine->registerFunction("console", "info", ConsoleScriptingInterface::info, scriptEngine->currentContext()->argumentCount()); |
| 819 | 834 | scriptEngine->registerFunction("console", "log", ConsoleScriptingInterface::log, scriptEngine->currentContext()->argumentCount()); |
| 820 | 835 | scriptEngine->registerFunction("console", "debug", ConsoleScriptingInterface::debug, scriptEngine->currentContext()->argumentCount()); |
| @@ -835,7 +850,7 @@ void ScriptManager::init() { · 14 unmodified lines | ||
| 835 | 850 | scriptEngine->globalObject().setProperty("Resource", resourcePrototype); |
| 836 | 851 | scriptEngine->setDefaultPrototype(qMetaTypeId<ScriptableResource*>(), resourcePrototype); |
| 837 | 852 | |
| 838 | − scriptEngine->registerGlobalObject("Assets", _assetScriptingInterface); | |
| 853 | + scriptEngine->registerGlobalObject("Assets", _assetScriptingInterface.get()); | |
| 839 | 854 | scriptEngine->registerGlobalObject("Resources", DependencyManager::get<ResourceScriptingInterface>().data()); |
| 840 | 855 | |
| 841 | 856 | scriptEngine->registerGlobalObject("DebugDraw", &DebugDraw::getInstance()); |
| @@ -941,6 +956,7 @@ bool ScriptManager::isStopped() const { · 99 unmodified lines | ||
| 941 | 956 | } |
| 942 | 957 | |
| 943 | 958 | void ScriptManager::run() { |
| 959 | + auto scopeGuard = _engine->getScopeGuard(); | |
| 944 | 960 | if (QThread::currentThread() != qApp->thread() && _context == Context::CLIENT_SCRIPT) { |
| 945 | 961 | // Flag that we're allowed to access local HTML files on UI created from C++ calls on this thread |
| 946 | 962 | // (because we're a client script) |