QScriptValue Base3DOverlay::getProperty(const QString& property) { if (property == "position" || property == "start" || property == "p1" || property == "point") { return vec3toScriptValue(_scriptEngine, getPosition()); } if (property == "lineWidth") { return _lineWidth; } if (property == "rotation") { return quatToScriptValue(_scriptEngine, getRotation()); } if (property == "isSolid" || property == "isFilled" || property == "solid" || property == "filed") { return _isSolid; } if (property == "isWire" || property == "wire") { return !_isSolid; } if (property == "isDashedLine" || property == "dashed") { return _isDashedLine; } if (property == "ignoreRayIntersection") { return _ignoreRayIntersection; } if (property == "drawInFront") { return _drawInFront; } if (property == "drawOnHUD") { return _drawOnHUD; } return Overlay::getProperty(property); }
QScriptValue qVectorQuatToScriptValue(QScriptEngine* engine, const QVector<glm::quat>& vector) { QScriptValue array = engine->newArray(); for (int i = 0; i < vector.size(); i++) { array.setProperty(i, quatToScriptValue(engine, vector.at(i))); } return array; }
QScriptValue ModelItemProperties::copyToScriptValue(QScriptEngine* engine) const { QScriptValue properties = engine->newObject(); QScriptValue position = vec3toScriptValue(engine, _position); properties.setProperty("position", position); QScriptValue color = xColorToScriptValue(engine, _color); properties.setProperty("color", color); properties.setProperty("radius", _radius); properties.setProperty("shouldDie", _shouldDie); properties.setProperty("modelURL", _modelURL); QScriptValue modelRotation = quatToScriptValue(engine, _modelRotation); properties.setProperty("modelRotation", modelRotation); if (_idSet) { properties.setProperty("id", _id); properties.setProperty("isKnownID", (_id != UNKNOWN_MODEL_ID)); } return properties; }
QScriptValue Pose::toScriptValue(QScriptEngine* engine, const Pose& pose) { QScriptValue obj = engine->newObject(); obj.setProperty("translation", vec3toScriptValue(engine, pose.translation)); obj.setProperty("rotation", quatToScriptValue(engine, pose.rotation)); obj.setProperty("velocity", vec3toScriptValue(engine, pose.velocity)); obj.setProperty("angularVelocity", vec3toScriptValue(engine, pose.angularVelocity)); obj.setProperty("valid", pose.valid); return obj; }
QScriptValue injectorOptionsToScriptValue(QScriptEngine* engine, const AudioInjectorOptions& injectorOptions) { QScriptValue obj = engine->newObject(); obj.setProperty("position", vec3toScriptValue(engine, injectorOptions.position)); obj.setProperty("volume", injectorOptions.volume); obj.setProperty("loop", injectorOptions.loop); obj.setProperty("orientation", quatToScriptValue(engine, injectorOptions.orientation)); obj.setProperty("ignorePenumbra", injectorOptions.ignorePenumbra); obj.setProperty("localOnly", injectorOptions.localOnly); obj.setProperty("secondOffset", injectorOptions.secondOffset); return obj; }
QScriptValue AnimVariantMap::animVariantMapToScriptValue(QScriptEngine* engine, const QStringList& names, bool useNames) const { if (QThread::currentThread() != engine->thread()) { qCWarning(animation) << "Cannot create Javacript object from non-script thread" << QThread::currentThread(); Q_ASSERT(false); return QScriptValue(); } QScriptValue target = engine->newObject(); auto setOne = [&] (const QString& name, const AnimVariant& value) { switch (value.getType()) { case AnimVariant::Type::Bool: target.setProperty(name, value.getBool()); break; case AnimVariant::Type::Int: target.setProperty(name, value.getInt()); break; case AnimVariant::Type::Float: target.setProperty(name, value.getFloat()); break; case AnimVariant::Type::String: target.setProperty(name, value.getString()); break; case AnimVariant::Type::Vec3: target.setProperty(name, vec3ToScriptValue(engine, value.getVec3())); break; case AnimVariant::Type::Quat: target.setProperty(name, quatToScriptValue(engine, value.getQuat())); break; default: // Unknown type assert(QString("AnimVariant::Type") == QString("valid")); } }; if (useNames) { // copy only the requested names for (const QString& name : names) { auto search = _map.find(name); if (search != _map.end()) { setOne(name, search->second); } else if (_triggers.count(name) == 1) { target.setProperty(name, true); } // scripts are allowed to request names that do not exist } } else { // copy all of them for (auto& pair : _map) { setOne(pair.first, pair.second); } } return target; }
QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine) const { QScriptValue properties = engine->newObject(); if (_idSet) { COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(id, _id.toString()); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(isKnownID, (_id != UNKNOWN_ENTITY_ID)); } else { COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(isKnownID, false); } COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(type, EntityTypes::getEntityTypeName(_type)); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(position); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(dimensions); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(naturalDimensions); // gettable, but not settable COPY_PROPERTY_TO_QSCRIPTVALUE_QUAT(rotation); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(velocity); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(gravity); COPY_PROPERTY_TO_QSCRIPTVALUE(damping); COPY_PROPERTY_TO_QSCRIPTVALUE(lifetime); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(age, getAge()); // gettable, but not settable COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(ageAsText, formatSecondsElapsed(getAge())); // gettable, but not settable COPY_PROPERTY_TO_QSCRIPTVALUE(script); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(registrationPoint); COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(angularVelocity); COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR(color); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationIsPlaying); COPY_PROPERTY_TO_QSCRIPTVALUE(animationFrameIndex); COPY_PROPERTY_TO_QSCRIPTVALUE(animationFPS); COPY_PROPERTY_TO_QSCRIPTVALUE(glowLevel); // Sitting properties support QScriptValue sittingPoints = engine->newObject(); for (int i = 0; i < _sittingPoints.size(); ++i) { QScriptValue sittingPoint = engine->newObject(); sittingPoint.setProperty("name", _sittingPoints[i].name); sittingPoint.setProperty("position", vec3toScriptValue(engine, _sittingPoints[i].position)); sittingPoint.setProperty("rotation", quatToScriptValue(engine, _sittingPoints[i].rotation)); sittingPoints.setProperty(i, sittingPoint); } sittingPoints.setProperty("length", _sittingPoints.size()); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(sittingPoints, sittingPoints); // gettable, but not settable return properties; }
QScriptValue OverlayPanel::getProperty(const QString &property) { if (property == "anchorPosition") { return vec3toScriptValue(_scriptEngine, getAnchorPosition()); } if (property == "anchorPositionBinding") { return propertyBindingToScriptValue(_scriptEngine, PropertyBinding(_anchorPositionBindMyAvatar ? "MyAvatar" : "", _anchorPositionBindEntity)); } if (property == "anchorRotation") { return quatToScriptValue(_scriptEngine, getAnchorRotation()); } if (property == "anchorRotationBinding") { return propertyBindingToScriptValue(_scriptEngine, PropertyBinding(_anchorRotationBindMyAvatar ? "MyAvatar" : "", _anchorRotationBindEntity)); } if (property == "anchorScale") { return vec3toScriptValue(_scriptEngine, getAnchorScale()); } if (property == "visible") { return getVisible(); } if (property == "children") { QScriptValue array = _scriptEngine->newArray(_children.length()); for (int i = 0; i < _children.length(); i++) { array.setProperty(i, _children[i]); } return array; } QScriptValue value = Billboardable::getProperty(_scriptEngine, property); if (value.isValid()) { return value; } return PanelAttachable::getProperty(_scriptEngine, property); }