History

Update ScriptEngine::entityScriptingInterface to be static pointer

Statically allocating the EntityScriptingInterface means we can't make sure it is initialized AFTER NodeList has been initialized

Ryan Huffman committed 11 years ago

Commit a4431571 parent 9a302ee2 files · +21 −13Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+19−11
@@ -44,7 +44,7 @@ · 43 unmodified lines
4444 #include "MIDIEvent.h"
4545
4646
47−EntityScriptingInterface ScriptEngine::_entityScriptingInterface;
47+EntityScriptingInterface* ScriptEngine::_entityScriptingInterface;
4848
4949 static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine){
5050 qDebug() << "script:print()<<" << context->argument(0).toString();
@@ -73,6 +73,13 @@ void inputControllerFromScriptValue(const QScriptValue &object, AbstractInputCon · 22 unmodified lines
7373 out = qobject_cast<AbstractInputController*>(object.toQObject());
7474 }
7575
76+EntityScriptingInterface* ScriptEngine::getEntityScriptingInterface() {
77+ if (ScriptEngine::_entityScriptingInterface == nullptr) {
78+ ScriptEngine::_entityScriptingInterface = new EntityScriptingInterface();
79+ }
80+ return ScriptEngine::_entityScriptingInterface;
81+}
82+
7683 ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNameString,
7784 AbstractControllerScriptingInterface* controllerScriptingInterface) :
7885
@@ -97,6 +104,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam · 18 unmodified lines
97104 _isUserLoaded(false),
98105 _arrayBufferClass(new ArrayBufferClass(this))
99106 {
107+ getEntityScriptingInterface();
100108 _allScriptsMutex.lock();
101109 _allKnownScriptEngines.insert(this);
102110 _allScriptsMutex.unlock();
@@ -314,7 +322,7 @@ void ScriptEngine::init() { · 211 unmodified lines
314322
315323 auto sceneScriptingInterface = DependencyManager::set<SceneScriptingInterface>();
316324
317− _entityScriptingInterface.init();
325+ _entityScriptingInterface->init();
318326
319327 // register various meta-types
320328 registerMetaTypes(this);
@@ -352,7 +360,7 @@ void ScriptEngine::init() { · 31 unmodified lines
352360 registerGlobalObject("Script", this);
353361 registerGlobalObject("Audio", &AudioScriptingInterface::getInstance());
354362 registerGlobalObject("Controller", _controllerScriptingInterface);
355− registerGlobalObject("Entities", &_entityScriptingInterface);
363+ registerGlobalObject("Entities", _entityScriptingInterface);
356364 registerGlobalObject("Quat", &_quatLibrary);
357365 registerGlobalObject("Vec3", &_vec3Library);
358366 registerGlobalObject("Uuid", &_uuidLibrary);
@@ -489,13 +497,13 @@ void ScriptEngine::run() { · 130 unmodified lines
489497 break;
490498 }
491499
492− if (!_isFinished && _entityScriptingInterface.getEntityPacketSender()->serversExist()) {
500+ if (!_isFinished && _entityScriptingInterface->getEntityPacketSender()->serversExist()) {
493501 // release the queue of edit entity messages.
494− _entityScriptingInterface.getEntityPacketSender()->releaseQueuedMessages();
502+ _entityScriptingInterface->getEntityPacketSender()->releaseQueuedMessages();
495503
496504 // since we're in non-threaded mode, call process so that the packets are sent
497− if (!_entityScriptingInterface.getEntityPacketSender()->isThreaded()) {
498− _entityScriptingInterface.getEntityPacketSender()->process();
505+ if (!_entityScriptingInterface->getEntityPacketSender()->isThreaded()) {
506+ _entityScriptingInterface->getEntityPacketSender()->process();
499507 }
500508 }
501509
@@ -622,13 +630,13 @@ void ScriptEngine::run() { · 120 unmodified lines
622630 // kill the avatar identity timer
623631 delete _avatarIdentityTimer;
624632
625− if (_entityScriptingInterface.getEntityPacketSender()->serversExist()) {
633+ if (_entityScriptingInterface->getEntityPacketSender()->serversExist()) {
626634 // release the queue of edit entity messages.
627− _entityScriptingInterface.getEntityPacketSender()->releaseQueuedMessages();
635+ _entityScriptingInterface->getEntityPacketSender()->releaseQueuedMessages();
628636
629637 // since we're in non-threaded mode, call process so that the packets are sent
630− if (!_entityScriptingInterface.getEntityPacketSender()->isThreaded()) {
631− _entityScriptingInterface.getEntityPacketSender()->process();
638+ if (!_entityScriptingInterface->getEntityPacketSender()->isThreaded()) {
639+ _entityScriptingInterface->getEntityPacketSender()->process();
632640 }
633641 }
634642