Fix invalid volume values in injector options

This commit is contained in:
Atlante45 2017-01-23 11:49:07 -08:00
parent 9605379265
commit 3f8b2f9cbb

View file

@ -9,9 +9,13 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include "AudioInjectorOptions.h"
#include <QScriptValueIterator>
#include <RegisteredMetaTypes.h> #include <RegisteredMetaTypes.h>
#include "AudioInjectorOptions.h" #include "AudioLogging.h"
AudioInjectorOptions::AudioInjectorOptions() : AudioInjectorOptions::AudioInjectorOptions() :
position(0.0f, 0.0f, 0.0f), position(0.0f, 0.0f, 0.0f),
@ -22,7 +26,7 @@ AudioInjectorOptions::AudioInjectorOptions() :
ambisonic(false), ambisonic(false),
ignorePenumbra(false), ignorePenumbra(false),
localOnly(false), localOnly(false),
secondOffset(0.0) secondOffset(0.0f)
{ {
} }
@ -40,31 +44,51 @@ QScriptValue injectorOptionsToScriptValue(QScriptEngine* engine, const AudioInje
} }
void injectorOptionsFromScriptValue(const QScriptValue& object, AudioInjectorOptions& injectorOptions) { void injectorOptionsFromScriptValue(const QScriptValue& object, AudioInjectorOptions& injectorOptions) {
if (object.property("position").isValid()) { if (!object.isObject()) {
qWarning() << "Audio injector options is not an object.";
return;
}
QScriptValueIterator it(object);
while (it.hasNext()) {
it.next();
if (it.name() == "position") {
vec3FromScriptValue(object.property("position"), injectorOptions.position); vec3FromScriptValue(object.property("position"), injectorOptions.position);
} } else if (it.name() == "orientation") {
if (object.property("volume").isValid()) {
injectorOptions.volume = object.property("volume").toNumber();
}
if (object.property("loop").isValid()) {
injectorOptions.loop = object.property("loop").toBool();
}
if (object.property("orientation").isValid()) {
quatFromScriptValue(object.property("orientation"), injectorOptions.orientation); quatFromScriptValue(object.property("orientation"), injectorOptions.orientation);
} else if (it.name() == "volume") {
if (it.value().isNumber()) {
injectorOptions.volume = it.value().toNumber();
} else {
qCWarning(audio) << "Audio injector options: volume is not a number";
} }
} else if (it.name() == "loop") {
if (object.property("ignorePenumbra").isValid()) { if (it.value().isBool()) {
injectorOptions.ignorePenumbra = object.property("ignorePenumbra").toBool(); injectorOptions.loop = it.value().toBool();
} else {
qCWarning(audio) << "Audio injector options: loop is not a boolean";
} }
} else if (it.name() == "ignorePenumbra") {
if (object.property("localOnly").isValid()) { if (it.value().isBool()) {
injectorOptions.localOnly = object.property("localOnly").toBool(); injectorOptions.ignorePenumbra = it.value().toBool();
} else {
qCWarning(audio) << "Audio injector options: ignorePenumbra is not a boolean";
}
} else if (it.name() == "localOnly") {
if (it.value().isBool()) {
injectorOptions.localOnly = it.value().toBool();
} else {
qCWarning(audio) << "Audio injector options: localOnly is not a boolean";
}
} else if (it.name() == "secondOffset") {
if (it.value().isNumber()) {
injectorOptions.secondOffset = it.value().toNumber();
} else {
qCWarning(audio) << "Audio injector options: secondOffset is not a number";
}
} else {
qCWarning(audio) << "Unknown audio injector option:" << it.name();
} }
if (object.property("secondOffset").isValid()) {
injectorOptions.secondOffset = object.property("secondOffset").toNumber();
} }
} }