EntityScriptServer tracks server scripts

This commit is contained in:
Atlante45 2017-01-17 16:41:56 -08:00
parent 97e9bfff36
commit 20b7bb0c54
6 changed files with 19 additions and 4 deletions

View file

@ -97,7 +97,7 @@ void EntityScriptServer::run() {
auto tree = _entityViewer.getTree().get(); auto tree = _entityViewer.getTree().get();
connect(tree, &EntityTree::deletingEntity, this, &EntityScriptServer::deletingEntity, Qt::QueuedConnection); connect(tree, &EntityTree::deletingEntity, this, &EntityScriptServer::deletingEntity, Qt::QueuedConnection);
connect(tree, &EntityTree::addingEntity, this, &EntityScriptServer::addingEntity, Qt::QueuedConnection); connect(tree, &EntityTree::addingEntity, this, &EntityScriptServer::addingEntity, Qt::QueuedConnection);
connect(tree, &EntityTree::entityScriptChanging, this, &EntityScriptServer::entityScriptChanging, Qt::QueuedConnection); connect(tree, &EntityTree::entityServerScriptChanging, this, &EntityScriptServer::entityServerScriptChanging, Qt::QueuedConnection);
} }
void EntityScriptServer::nodeActivated(SharedNodePointer activatedNode) { void EntityScriptServer::nodeActivated(SharedNodePointer activatedNode) {
@ -220,7 +220,7 @@ void EntityScriptServer::deletingEntity(const EntityItemID& entityID) {
} }
} }
void EntityScriptServer::entityScriptChanging(const EntityItemID& entityID, const bool reload) { void EntityScriptServer::entityServerScriptChanging(const EntityItemID& entityID, const bool reload) {
if (_entityViewer.getTree() && !_shuttingDown) { if (_entityViewer.getTree() && !_shuttingDown) {
_entitiesScriptEngine->unloadEntityScript(entityID); _entitiesScriptEngine->unloadEntityScript(entityID);
checkAndCallPreload(entityID, reload); checkAndCallPreload(entityID, reload);
@ -231,7 +231,7 @@ void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, const
if (_entityViewer.getTree() && !_shuttingDown) { if (_entityViewer.getTree() && !_shuttingDown) {
EntityItemPointer entity = _entityViewer.getTree()->findEntityByEntityItemID(entityID); EntityItemPointer entity = _entityViewer.getTree()->findEntityByEntityItemID(entityID);
if (entity && entity->shouldPreloadScript() && _entitiesScriptEngine) { if (entity && entity->shouldPreloadScript() && _entitiesScriptEngine) {
QString scriptUrl = entity->getScript(); QString scriptUrl = entity->getServerScripts();
scriptUrl = ResourceManager::normalizeURL(scriptUrl); scriptUrl = ResourceManager::normalizeURL(scriptUrl);
ScriptEngine::loadEntityScript(_entitiesScriptEngine, entityID, scriptUrl, reload); ScriptEngine::loadEntityScript(_entitiesScriptEngine, entityID, scriptUrl, reload);
entity->scriptHasPreloaded(); entity->scriptHasPreloaded();

View file

@ -48,7 +48,7 @@ private:
void shutdown(); void shutdown();
void addingEntity(const EntityItemID& entityID); void addingEntity(const EntityItemID& entityID);
void deletingEntity(const EntityItemID& entityID); void deletingEntity(const EntityItemID& entityID);
void entityScriptChanging(const EntityItemID& entityID, const bool reload); void entityServerScriptChanging(const EntityItemID& entityID, const bool reload);
void checkAndCallPreload(const EntityItemID& entityID, const bool reload = false); void checkAndCallPreload(const EntityItemID& entityID, const bool reload = false);
bool _shuttingDown { false }; bool _shuttingDown { false };

View file

@ -444,6 +444,10 @@ public:
((_loadedScript != _script) || (_loadedScriptTimestamp != _scriptTimestamp)); } ((_loadedScript != _script) || (_loadedScriptTimestamp != _scriptTimestamp)); }
void scriptHasPreloaded() { _loadedScript = _script; _loadedScriptTimestamp = _scriptTimestamp; } void scriptHasPreloaded() { _loadedScript = _script; _loadedScriptTimestamp = _scriptTimestamp; }
bool shouldPreloadServerScript() const { return !_script.isEmpty() &&
((_loadedScript != _script) || (_loadedScriptTimestamp != _scriptTimestamp)); }
void serverScriptHasPreloaded() { _loadedScript = _script; _loadedScriptTimestamp = _scriptTimestamp; }
bool getClientOnly() const { return _clientOnly; } bool getClientOnly() const { return _clientOnly; }
void setClientOnly(bool clientOnly) { _clientOnly = clientOnly; } void setClientOnly(bool clientOnly) { _clientOnly = clientOnly; }
// if this entity is client-only, which avatar is it associated with? // if this entity is client-only, which avatar is it associated with?

View file

@ -394,6 +394,10 @@ void EntityTree::emitEntityScriptChanging(const EntityItemID& entityItemID, cons
emit entityScriptChanging(entityItemID, reload); emit entityScriptChanging(entityItemID, reload);
} }
void EntityTree::emitEntityServerScriptChanging(const EntityItemID& entityItemID, const bool reload) {
emit entityServerScriptChanging(entityItemID, reload);
}
void EntityTree::notifyNewCollisionSoundURL(const QString& newURL, const EntityItemID& entityID) { void EntityTree::notifyNewCollisionSoundURL(const QString& newURL, const EntityItemID& entityID) {
emit newCollisionSoundURL(QUrl(newURL), entityID); emit newCollisionSoundURL(QUrl(newURL), entityID);
} }

View file

@ -202,6 +202,7 @@ public:
void entityChanged(EntityItemPointer entity); void entityChanged(EntityItemPointer entity);
void emitEntityScriptChanging(const EntityItemID& entityItemID, const bool reload); void emitEntityScriptChanging(const EntityItemID& entityItemID, const bool reload);
void emitEntityServerScriptChanging(const EntityItemID& entityItemID, const bool reload);
void setSimulation(EntitySimulationPointer simulation); void setSimulation(EntitySimulationPointer simulation);
EntitySimulationPointer getSimulation() const { return _simulation; } EntitySimulationPointer getSimulation() const { return _simulation; }
@ -270,6 +271,7 @@ signals:
void deletingEntity(const EntityItemID& entityID); void deletingEntity(const EntityItemID& entityID);
void addingEntity(const EntityItemID& entityID); void addingEntity(const EntityItemID& entityID);
void entityScriptChanging(const EntityItemID& entityItemID, const bool reload); void entityScriptChanging(const EntityItemID& entityItemID, const bool reload);
void entityServerScriptChanging(const EntityItemID& entityItemID, const bool reload);
void newCollisionSoundURL(const QUrl& url, const EntityItemID& entityID); void newCollisionSoundURL(const QUrl& url, const EntityItemID& entityID);
void clearingEntities(); void clearingEntities();

View file

@ -925,6 +925,7 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int
// 3) remember the old cube for the entity so we can mark it as dirty // 3) remember the old cube for the entity so we can mark it as dirty
if (entityItem) { if (entityItem) {
QString entityScriptBefore = entityItem->getScript(); QString entityScriptBefore = entityItem->getScript();
QString entityServerScriptsBefore = entityItem->getServerScripts();
quint64 entityScriptTimestampBefore = entityItem->getScriptTimestamp(); quint64 entityScriptTimestampBefore = entityItem->getScriptTimestamp();
bool bestFitBefore = bestFitEntityBounds(entityItem); bool bestFitBefore = bestFitEntityBounds(entityItem);
EntityTreeElementPointer currentContainingElement = _myTree->getContainingElement(entityItemID); EntityTreeElementPointer currentContainingElement = _myTree->getContainingElement(entityItemID);
@ -948,6 +949,7 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int
} }
QString entityScriptAfter = entityItem->getScript(); QString entityScriptAfter = entityItem->getScript();
QString entityServerScriptsAfter = entityItem->getServerScripts();
quint64 entityScriptTimestampAfter = entityItem->getScriptTimestamp(); quint64 entityScriptTimestampAfter = entityItem->getScriptTimestamp();
bool reload = entityScriptTimestampBefore != entityScriptTimestampAfter; bool reload = entityScriptTimestampBefore != entityScriptTimestampAfter;
@ -956,6 +958,9 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int
if (entityScriptBefore != entityScriptAfter || reload) { if (entityScriptBefore != entityScriptAfter || reload) {
_myTree->emitEntityScriptChanging(entityItemID, reload); // the entity script has changed _myTree->emitEntityScriptChanging(entityItemID, reload); // the entity script has changed
} }
if (entityServerScriptsBefore != entityServerScriptsAfter || reload) {
_myTree->emitEntityServerScriptChanging(entityItemID, reload); // the entity server script has changed
}
} else { } else {
entityItem = EntityTypes::constructEntityItem(dataAt, bytesLeftToRead, args); entityItem = EntityTypes::constructEntityItem(dataAt, bytesLeftToRead, args);