mirror of
https://github.com/overte-org/overte.git
synced 2025-04-16 06:51:15 +02:00
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
This commit is contained in:
parent
9a302eebed
commit
a443157dd7
2 changed files with 21 additions and 13 deletions
|
@ -44,7 +44,7 @@
|
|||
#include "MIDIEvent.h"
|
||||
|
||||
|
||||
EntityScriptingInterface ScriptEngine::_entityScriptingInterface;
|
||||
EntityScriptingInterface* ScriptEngine::_entityScriptingInterface;
|
||||
|
||||
static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine){
|
||||
qDebug() << "script:print()<<" << context->argument(0).toString();
|
||||
|
@ -73,6 +73,13 @@ void inputControllerFromScriptValue(const QScriptValue &object, AbstractInputCon
|
|||
out = qobject_cast<AbstractInputController*>(object.toQObject());
|
||||
}
|
||||
|
||||
EntityScriptingInterface* ScriptEngine::getEntityScriptingInterface() {
|
||||
if (ScriptEngine::_entityScriptingInterface == nullptr) {
|
||||
ScriptEngine::_entityScriptingInterface = new EntityScriptingInterface();
|
||||
}
|
||||
return ScriptEngine::_entityScriptingInterface;
|
||||
}
|
||||
|
||||
ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNameString,
|
||||
AbstractControllerScriptingInterface* controllerScriptingInterface) :
|
||||
|
||||
|
@ -97,6 +104,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam
|
|||
_isUserLoaded(false),
|
||||
_arrayBufferClass(new ArrayBufferClass(this))
|
||||
{
|
||||
getEntityScriptingInterface();
|
||||
_allScriptsMutex.lock();
|
||||
_allKnownScriptEngines.insert(this);
|
||||
_allScriptsMutex.unlock();
|
||||
|
@ -314,7 +322,7 @@ void ScriptEngine::init() {
|
|||
|
||||
auto sceneScriptingInterface = DependencyManager::set<SceneScriptingInterface>();
|
||||
|
||||
_entityScriptingInterface.init();
|
||||
_entityScriptingInterface->init();
|
||||
|
||||
// register various meta-types
|
||||
registerMetaTypes(this);
|
||||
|
@ -352,7 +360,7 @@ void ScriptEngine::init() {
|
|||
registerGlobalObject("Script", this);
|
||||
registerGlobalObject("Audio", &AudioScriptingInterface::getInstance());
|
||||
registerGlobalObject("Controller", _controllerScriptingInterface);
|
||||
registerGlobalObject("Entities", &_entityScriptingInterface);
|
||||
registerGlobalObject("Entities", _entityScriptingInterface);
|
||||
registerGlobalObject("Quat", &_quatLibrary);
|
||||
registerGlobalObject("Vec3", &_vec3Library);
|
||||
registerGlobalObject("Uuid", &_uuidLibrary);
|
||||
|
@ -489,13 +497,13 @@ void ScriptEngine::run() {
|
|||
break;
|
||||
}
|
||||
|
||||
if (!_isFinished && _entityScriptingInterface.getEntityPacketSender()->serversExist()) {
|
||||
if (!_isFinished && _entityScriptingInterface->getEntityPacketSender()->serversExist()) {
|
||||
// release the queue of edit entity messages.
|
||||
_entityScriptingInterface.getEntityPacketSender()->releaseQueuedMessages();
|
||||
_entityScriptingInterface->getEntityPacketSender()->releaseQueuedMessages();
|
||||
|
||||
// since we're in non-threaded mode, call process so that the packets are sent
|
||||
if (!_entityScriptingInterface.getEntityPacketSender()->isThreaded()) {
|
||||
_entityScriptingInterface.getEntityPacketSender()->process();
|
||||
if (!_entityScriptingInterface->getEntityPacketSender()->isThreaded()) {
|
||||
_entityScriptingInterface->getEntityPacketSender()->process();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -622,13 +630,13 @@ void ScriptEngine::run() {
|
|||
// kill the avatar identity timer
|
||||
delete _avatarIdentityTimer;
|
||||
|
||||
if (_entityScriptingInterface.getEntityPacketSender()->serversExist()) {
|
||||
if (_entityScriptingInterface->getEntityPacketSender()->serversExist()) {
|
||||
// release the queue of edit entity messages.
|
||||
_entityScriptingInterface.getEntityPacketSender()->releaseQueuedMessages();
|
||||
_entityScriptingInterface->getEntityPacketSender()->releaseQueuedMessages();
|
||||
|
||||
// since we're in non-threaded mode, call process so that the packets are sent
|
||||
if (!_entityScriptingInterface.getEntityPacketSender()->isThreaded()) {
|
||||
_entityScriptingInterface.getEntityPacketSender()->process();
|
||||
if (!_entityScriptingInterface->getEntityPacketSender()->isThreaded()) {
|
||||
_entityScriptingInterface->getEntityPacketSender()->process();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ public:
|
|||
~ScriptEngine();
|
||||
|
||||
/// Access the EntityScriptingInterface in order to initialize it with a custom packet sender and jurisdiction listener
|
||||
static EntityScriptingInterface* getEntityScriptingInterface() { return &_entityScriptingInterface; }
|
||||
static EntityScriptingInterface* getEntityScriptingInterface();
|
||||
|
||||
ArrayBufferClass* getArrayBufferClass() { return _arrayBufferClass; }
|
||||
|
||||
|
@ -153,7 +153,7 @@ private:
|
|||
QObject* setupTimerWithInterval(const QScriptValue& function, int intervalMS, bool isSingleShot);
|
||||
void stopTimer(QTimer* timer);
|
||||
|
||||
static EntityScriptingInterface _entityScriptingInterface;
|
||||
static EntityScriptingInterface* _entityScriptingInterface;
|
||||
|
||||
AbstractControllerScriptingInterface* _controllerScriptingInterface;
|
||||
AvatarData* _avatarData;
|
||||
|
|
Loading…
Reference in a new issue