mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-29 16:43:24 +02:00
Merge branch 'master' of github.com:highfidelity/hifi into tablet-ui
This commit is contained in:
commit
91cac892d2
8 changed files with 64 additions and 49 deletions
|
@ -58,6 +58,8 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig
|
||||||
|
|
||||||
DependencyManager::registerInheritance<SpatialParentFinder, AssignmentParentFinder>();
|
DependencyManager::registerInheritance<SpatialParentFinder, AssignmentParentFinder>();
|
||||||
|
|
||||||
|
DependencyManager::set<AudioScriptingInterface>();
|
||||||
|
|
||||||
DependencyManager::set<ResourceCacheSharedItems>();
|
DependencyManager::set<ResourceCacheSharedItems>();
|
||||||
DependencyManager::set<SoundCache>();
|
DependencyManager::set<SoundCache>();
|
||||||
DependencyManager::set<AudioInjectorManager>();
|
DependencyManager::set<AudioInjectorManager>();
|
||||||
|
@ -324,7 +326,26 @@ void EntityScriptServer::nodeActivated(SharedNodePointer activatedNode) {
|
||||||
void EntityScriptServer::nodeKilled(SharedNodePointer killedNode) {
|
void EntityScriptServer::nodeKilled(SharedNodePointer killedNode) {
|
||||||
switch (killedNode->getType()) {
|
switch (killedNode->getType()) {
|
||||||
case NodeType::EntityServer: {
|
case NodeType::EntityServer: {
|
||||||
clear();
|
// Before we clear, make sure this was our only entity server.
|
||||||
|
// Otherwise we're assuming that we have "trading" entity servers
|
||||||
|
// (an old one going away and a new one coming onboard)
|
||||||
|
// and that we shouldn't clear here because we're still doing work.
|
||||||
|
bool hasAnotherEntityServer = false;
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
nodeList->eachNodeBreakable([&hasAnotherEntityServer, &killedNode](const SharedNodePointer& node){
|
||||||
|
if (node->getType() == NodeType::EntityServer && node->getUUID() != killedNode->getUUID()) {
|
||||||
|
// we're talking to > 1 entity servers, we know we won't clear
|
||||||
|
hasAnotherEntityServer = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!hasAnotherEntityServer) {
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -395,7 +416,8 @@ void EntityScriptServer::selectAudioFormat(const QString& selectedCodecName) {
|
||||||
|
|
||||||
void EntityScriptServer::resetEntitiesScriptEngine() {
|
void EntityScriptServer::resetEntitiesScriptEngine() {
|
||||||
auto engineName = QString("about:Entities %1").arg(++_entitiesScriptEngineCount);
|
auto engineName = QString("about:Entities %1").arg(++_entitiesScriptEngineCount);
|
||||||
auto newEngine = QSharedPointer<ScriptEngine>(new ScriptEngine(ScriptEngine::ENTITY_SERVER_SCRIPT, NO_SCRIPT, engineName));
|
auto newEngine = QSharedPointer<ScriptEngine>(new ScriptEngine(ScriptEngine::ENTITY_SERVER_SCRIPT, NO_SCRIPT, engineName),
|
||||||
|
&ScriptEngine::deleteLater);
|
||||||
|
|
||||||
auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);
|
auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);
|
||||||
newEngine->globalObject().setProperty("WebSocketServer", webSocketServerConstructorValue);
|
newEngine->globalObject().setProperty("WebSocketServer", webSocketServerConstructorValue);
|
||||||
|
|
|
@ -745,23 +745,24 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
auto& audioScriptingInterface = AudioScriptingInterface::getInstance();
|
auto audioScriptingInterface = DependencyManager::set<AudioScriptingInterface>();
|
||||||
connect(audioThread, &QThread::started, audioIO.data(), &AudioClient::start);
|
connect(audioThread, &QThread::started, audioIO.data(), &AudioClient::start);
|
||||||
connect(audioIO.data(), &AudioClient::destroyed, audioThread, &QThread::quit);
|
connect(audioIO.data(), &AudioClient::destroyed, audioThread, &QThread::quit);
|
||||||
connect(audioThread, &QThread::finished, audioThread, &QThread::deleteLater);
|
connect(audioThread, &QThread::finished, audioThread, &QThread::deleteLater);
|
||||||
connect(audioIO.data(), &AudioClient::muteToggled, this, &Application::audioMuteToggled);
|
connect(audioIO.data(), &AudioClient::muteToggled, this, &Application::audioMuteToggled);
|
||||||
connect(audioIO.data(), &AudioClient::mutedByMixer, &audioScriptingInterface, &AudioScriptingInterface::mutedByMixer);
|
connect(audioIO.data(), &AudioClient::mutedByMixer, audioScriptingInterface.data(), &AudioScriptingInterface::mutedByMixer);
|
||||||
connect(audioIO.data(), &AudioClient::receivedFirstPacket, &audioScriptingInterface, &AudioScriptingInterface::receivedFirstPacket);
|
connect(audioIO.data(), &AudioClient::receivedFirstPacket, audioScriptingInterface.data(), &AudioScriptingInterface::receivedFirstPacket);
|
||||||
connect(audioIO.data(), &AudioClient::disconnected, &audioScriptingInterface, &AudioScriptingInterface::disconnected);
|
connect(audioIO.data(), &AudioClient::disconnected, audioScriptingInterface.data(), &AudioScriptingInterface::disconnected);
|
||||||
connect(audioIO.data(), &AudioClient::muteEnvironmentRequested, [](glm::vec3 position, float radius) {
|
connect(audioIO.data(), &AudioClient::muteEnvironmentRequested, [](glm::vec3 position, float radius) {
|
||||||
auto audioClient = DependencyManager::get<AudioClient>();
|
auto audioClient = DependencyManager::get<AudioClient>();
|
||||||
|
auto audioScriptingInterface = DependencyManager::get<AudioScriptingInterface>();
|
||||||
auto myAvatarPosition = DependencyManager::get<AvatarManager>()->getMyAvatar()->getPosition();
|
auto myAvatarPosition = DependencyManager::get<AvatarManager>()->getMyAvatar()->getPosition();
|
||||||
float distance = glm::distance(myAvatarPosition, position);
|
float distance = glm::distance(myAvatarPosition, position);
|
||||||
bool shouldMute = !audioClient->isMuted() && (distance < radius);
|
bool shouldMute = !audioClient->isMuted() && (distance < radius);
|
||||||
|
|
||||||
if (shouldMute) {
|
if (shouldMute) {
|
||||||
audioClient->toggleMute();
|
audioClient->toggleMute();
|
||||||
AudioScriptingInterface::getInstance().environmentMuted();
|
audioScriptingInterface->environmentMuted();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1189,10 +1190,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
|
|
||||||
// set the local loopback interface for local sounds
|
// set the local loopback interface for local sounds
|
||||||
AudioInjector::setLocalAudioInterface(audioIO.data());
|
AudioInjector::setLocalAudioInterface(audioIO.data());
|
||||||
AudioScriptingInterface::getInstance().setLocalAudioInterface(audioIO.data());
|
audioScriptingInterface->setLocalAudioInterface(audioIO.data());
|
||||||
connect(audioIO.data(), &AudioClient::noiseGateOpened, &AudioScriptingInterface::getInstance(), &AudioScriptingInterface::noiseGateOpened);
|
connect(audioIO.data(), &AudioClient::noiseGateOpened, audioScriptingInterface.data(), &AudioScriptingInterface::noiseGateOpened);
|
||||||
connect(audioIO.data(), &AudioClient::noiseGateClosed, &AudioScriptingInterface::getInstance(), &AudioScriptingInterface::noiseGateClosed);
|
connect(audioIO.data(), &AudioClient::noiseGateClosed, audioScriptingInterface.data(), &AudioScriptingInterface::noiseGateClosed);
|
||||||
connect(audioIO.data(), &AudioClient::inputReceived, &AudioScriptingInterface::getInstance(), &AudioScriptingInterface::inputReceived);
|
connect(audioIO.data(), &AudioClient::inputReceived, audioScriptingInterface.data(), &AudioScriptingInterface::inputReceived);
|
||||||
|
|
||||||
|
|
||||||
this->installEventFilter(this);
|
this->installEventFilter(this);
|
||||||
|
@ -1956,7 +1957,7 @@ void Application::initializeUi() {
|
||||||
// For some reason there is already an "Application" object in the QML context,
|
// For some reason there is already an "Application" object in the QML context,
|
||||||
// though I can't find it. Hence, "ApplicationInterface"
|
// though I can't find it. Hence, "ApplicationInterface"
|
||||||
rootContext->setContextProperty("ApplicationInterface", this);
|
rootContext->setContextProperty("ApplicationInterface", this);
|
||||||
rootContext->setContextProperty("Audio", &AudioScriptingInterface::getInstance());
|
rootContext->setContextProperty("Audio", DependencyManager::get<AudioScriptingInterface>().data());
|
||||||
rootContext->setContextProperty("AudioStats", DependencyManager::get<AudioClient>()->getStats().data());
|
rootContext->setContextProperty("AudioStats", DependencyManager::get<AudioClient>()->getStats().data());
|
||||||
rootContext->setContextProperty("AudioScope", DependencyManager::get<AudioScope>().data());
|
rootContext->setContextProperty("AudioScope", DependencyManager::get<AudioScope>().data());
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,6 @@ void registerAudioMetaTypes(QScriptEngine* engine) {
|
||||||
qScriptRegisterMetaType(engine, soundSharedPointerToScriptValue, soundSharedPointerFromScriptValue);
|
qScriptRegisterMetaType(engine, soundSharedPointerToScriptValue, soundSharedPointerFromScriptValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioScriptingInterface& AudioScriptingInterface::getInstance() {
|
|
||||||
static AudioScriptingInterface staticInstance;
|
|
||||||
return staticInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioScriptingInterface::AudioScriptingInterface() :
|
AudioScriptingInterface::AudioScriptingInterface() :
|
||||||
_localAudioInterface(NULL)
|
_localAudioInterface(NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,18 +14,20 @@
|
||||||
|
|
||||||
#include <AbstractAudioInterface.h>
|
#include <AbstractAudioInterface.h>
|
||||||
#include <AudioInjector.h>
|
#include <AudioInjector.h>
|
||||||
|
#include <DependencyManager.h>
|
||||||
#include <Sound.h>
|
#include <Sound.h>
|
||||||
|
|
||||||
class ScriptAudioInjector;
|
class ScriptAudioInjector;
|
||||||
|
|
||||||
class AudioScriptingInterface : public QObject {
|
class AudioScriptingInterface : public QObject, public Dependency {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
SINGLETON_DEPENDENCY
|
||||||
static AudioScriptingInterface& getInstance();
|
|
||||||
|
|
||||||
|
public:
|
||||||
void setLocalAudioInterface(AbstractAudioInterface* audioInterface) { _localAudioInterface = audioInterface; }
|
void setLocalAudioInterface(AbstractAudioInterface* audioInterface) { _localAudioInterface = audioInterface; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// this method is protected to stop C++ callers from calling, but invokable from script
|
// this method is protected to stop C++ callers from calling, but invokable from script
|
||||||
Q_INVOKABLE ScriptAudioInjector* playSound(SharedSoundPointer sound, const AudioInjectorOptions& injectorOptions = AudioInjectorOptions());
|
Q_INVOKABLE ScriptAudioInjector* playSound(SharedSoundPointer sound, const AudioInjectorOptions& injectorOptions = AudioInjectorOptions());
|
||||||
|
|
||||||
|
@ -42,6 +44,7 @@ signals:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AudioScriptingInterface();
|
AudioScriptingInterface();
|
||||||
|
|
||||||
AbstractAudioInterface* _localAudioInterface;
|
AbstractAudioInterface* _localAudioInterface;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -464,17 +464,17 @@ void ScriptEngine::loadURL(const QUrl& scriptURL, bool reload) {
|
||||||
|
|
||||||
void ScriptEngine::scriptErrorMessage(const QString& message) {
|
void ScriptEngine::scriptErrorMessage(const QString& message) {
|
||||||
qCCritical(scriptengine) << qPrintable(message);
|
qCCritical(scriptengine) << qPrintable(message);
|
||||||
emit errorMessage(message);
|
emit errorMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::scriptWarningMessage(const QString& message) {
|
void ScriptEngine::scriptWarningMessage(const QString& message) {
|
||||||
qCWarning(scriptengine) << message;
|
qCWarning(scriptengine) << message;
|
||||||
emit warningMessage(message);
|
emit warningMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::scriptInfoMessage(const QString& message) {
|
void ScriptEngine::scriptInfoMessage(const QString& message) {
|
||||||
qCInfo(scriptengine) << message;
|
qCInfo(scriptengine) << message;
|
||||||
emit infoMessage(message);
|
emit infoMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Even though we never pass AnimVariantMap directly to and from javascript, the queued invokeMethod of
|
// Even though we never pass AnimVariantMap directly to and from javascript, the queued invokeMethod of
|
||||||
|
@ -627,6 +627,9 @@ void ScriptEngine::init() {
|
||||||
qScriptRegisterMetaType(this, qWSCloseCodeToScriptValue, qWSCloseCodeFromScriptValue);
|
qScriptRegisterMetaType(this, qWSCloseCodeToScriptValue, qWSCloseCodeFromScriptValue);
|
||||||
qScriptRegisterMetaType(this, wscReadyStateToScriptValue, wscReadyStateFromScriptValue);
|
qScriptRegisterMetaType(this, wscReadyStateToScriptValue, wscReadyStateFromScriptValue);
|
||||||
|
|
||||||
|
// NOTE: You do not want to end up creating new instances of singletons here. They will be on the ScriptEngine thread
|
||||||
|
// and are likely to be unusable if we "reset" the ScriptEngine by creating a new one (on a whole new thread).
|
||||||
|
|
||||||
registerGlobalObject("Script", this);
|
registerGlobalObject("Script", this);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -638,7 +641,8 @@ void ScriptEngine::init() {
|
||||||
resetModuleCache();
|
resetModuleCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
registerGlobalObject("Audio", &AudioScriptingInterface::getInstance());
|
registerGlobalObject("Audio", DependencyManager::get<AudioScriptingInterface>().data());
|
||||||
|
|
||||||
registerGlobalObject("Entities", entityScriptingInterface.data());
|
registerGlobalObject("Entities", entityScriptingInterface.data());
|
||||||
registerGlobalObject("Quat", &_quatLibrary);
|
registerGlobalObject("Quat", &_quatLibrary);
|
||||||
registerGlobalObject("Vec3", &_vec3Library);
|
registerGlobalObject("Vec3", &_vec3Library);
|
||||||
|
@ -1347,7 +1351,7 @@ QUrl ScriptEngine::resourcesPath() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::print(const QString& message) {
|
void ScriptEngine::print(const QString& message) {
|
||||||
emit printedMessage(message);
|
emit printedMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Script.require.resolve -- like resolvePath, but performs more validation and throws exceptions on invalid module identifiers (for consistency with Node.js)
|
// Script.require.resolve -- like resolvePath, but performs more validation and throws exceptions on invalid module identifiers (for consistency with Node.js)
|
||||||
|
|
|
@ -236,10 +236,10 @@ signals:
|
||||||
void scriptEnding();
|
void scriptEnding();
|
||||||
void finished(const QString& fileNameString, ScriptEngine* engine);
|
void finished(const QString& fileNameString, ScriptEngine* engine);
|
||||||
void cleanupMenuItem(const QString& menuItemString);
|
void cleanupMenuItem(const QString& menuItemString);
|
||||||
void printedMessage(const QString& message);
|
void printedMessage(const QString& message, const QString& scriptName);
|
||||||
void errorMessage(const QString& message);
|
void errorMessage(const QString& message, const QString& scriptName);
|
||||||
void warningMessage(const QString& message);
|
void warningMessage(const QString& message, const QString& scriptName);
|
||||||
void infoMessage(const QString& message);
|
void infoMessage(const QString& message, const QString& scriptName);
|
||||||
void runningStateChanged();
|
void runningStateChanged();
|
||||||
void loadScript(const QString& scriptName, bool isUserLoaded);
|
void loadScript(const QString& scriptName, bool isUserLoaded);
|
||||||
void reloadScript(const QString& scriptName, bool isUserLoaded);
|
void reloadScript(const QString& scriptName, bool isUserLoaded);
|
||||||
|
|
|
@ -34,34 +34,24 @@ ScriptsModel& getScriptsModel() {
|
||||||
return scriptsModel;
|
return scriptsModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngines::onPrintedMessage(const QString& message) {
|
void ScriptEngines::onPrintedMessage(const QString& message, const QString& scriptName) {
|
||||||
auto scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
|
||||||
auto scriptName = scriptEngine ? scriptEngine->getFilename() : "";
|
|
||||||
emit printedMessage(message, scriptName);
|
emit printedMessage(message, scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngines::onErrorMessage(const QString& message) {
|
void ScriptEngines::onErrorMessage(const QString& message, const QString& scriptName) {
|
||||||
auto scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
|
||||||
auto scriptName = scriptEngine ? scriptEngine->getFilename() : "";
|
|
||||||
emit errorMessage(message, scriptName);
|
emit errorMessage(message, scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngines::onWarningMessage(const QString& message) {
|
void ScriptEngines::onWarningMessage(const QString& message, const QString& scriptName) {
|
||||||
auto scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
|
||||||
auto scriptName = scriptEngine ? scriptEngine->getFilename() : "";
|
|
||||||
emit warningMessage(message, scriptName);
|
emit warningMessage(message, scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngines::onInfoMessage(const QString& message) {
|
void ScriptEngines::onInfoMessage(const QString& message, const QString& scriptName) {
|
||||||
auto scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
|
||||||
auto scriptName = scriptEngine ? scriptEngine->getFilename() : "";
|
|
||||||
emit infoMessage(message, scriptName);
|
emit infoMessage(message, scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngines::onErrorLoadingScript(const QString& url) {
|
void ScriptEngines::onErrorLoadingScript(const QString& url) {
|
||||||
auto scriptEngine = qobject_cast<ScriptEngine*>(sender());
|
emit errorLoadingScript(url);
|
||||||
auto scriptName = scriptEngine ? scriptEngine->getFilename() : "";
|
|
||||||
emit errorLoadingScript(url, scriptName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptEngines::ScriptEngines(ScriptEngine::Context context)
|
ScriptEngines::ScriptEngines(ScriptEngine::Context context)
|
||||||
|
|
|
@ -79,13 +79,13 @@ signals:
|
||||||
void errorMessage(const QString& message, const QString& engineName);
|
void errorMessage(const QString& message, const QString& engineName);
|
||||||
void warningMessage(const QString& message, const QString& engineName);
|
void warningMessage(const QString& message, const QString& engineName);
|
||||||
void infoMessage(const QString& message, const QString& engineName);
|
void infoMessage(const QString& message, const QString& engineName);
|
||||||
void errorLoadingScript(const QString& url, const QString& engineName);
|
void errorLoadingScript(const QString& url);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onPrintedMessage(const QString& message);
|
void onPrintedMessage(const QString& message, const QString& scriptName);
|
||||||
void onErrorMessage(const QString& message);
|
void onErrorMessage(const QString& message, const QString& scriptName);
|
||||||
void onWarningMessage(const QString& message);
|
void onWarningMessage(const QString& message, const QString& scriptName);
|
||||||
void onInfoMessage(const QString& message);
|
void onInfoMessage(const QString& message, const QString& scriptName);
|
||||||
void onErrorLoadingScript(const QString& url);
|
void onErrorLoadingScript(const QString& url);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
|
Loading…
Reference in a new issue