From 8169d821411f15f849daa467772e31b4eb623b93 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 12 May 2015 17:13:20 -0700 Subject: [PATCH] consolidate COPY_PROPERTY_TO_QSCRIPTVALUE and COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE to be type safe --- .../entities/src/AtmospherePropertyGroup.cpp | 4 +- .../entities/src/EntityItemProperties.cpp | 32 +++++---- .../entities/src/EntityItemPropertiesMacros.h | 69 +++++-------------- libraries/entities/src/EntityPropertyFlags.h | 1 + .../entities/src/SkyboxPropertyGroup.cpp | 2 +- 5 files changed, 37 insertions(+), 71 deletions(-) diff --git a/libraries/entities/src/AtmospherePropertyGroup.cpp b/libraries/entities/src/AtmospherePropertyGroup.cpp index d57aa47947..96f5dffb12 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.cpp +++ b/libraries/entities/src/AtmospherePropertyGroup.cpp @@ -33,12 +33,12 @@ AtmospherePropertyGroup::AtmospherePropertyGroup() { } void AtmospherePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_VEC3(Atmosphere, atmosphere, Center, center); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, Center, center); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, InnerRadius, innerRadius); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, OuterRadius, outerRadius); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, MieScattering, mieScattering); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, RayleighScattering, rayleighScattering); - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_VEC3(Atmosphere, atmosphere, ScatteringWavelengths, scatteringWavelengths); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, ScatteringWavelengths, scatteringWavelengths); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, atmosphere, HasStars, hasStars); } diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index d57bd33db4..cee7cd9fda 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -348,15 +348,15 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool } 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(position); + COPY_PROPERTY_TO_QSCRIPTVALUE(dimensions); if (!skipDefaults) { - COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(naturalDimensions); // gettable, but not settable + COPY_PROPERTY_TO_QSCRIPTVALUE(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_VEC3(acceleration); + COPY_PROPERTY_TO_QSCRIPTVALUE(rotation); + COPY_PROPERTY_TO_QSCRIPTVALUE(velocity); + COPY_PROPERTY_TO_QSCRIPTVALUE(gravity); + COPY_PROPERTY_TO_QSCRIPTVALUE(acceleration); COPY_PROPERTY_TO_QSCRIPTVALUE(damping); COPY_PROPERTY_TO_QSCRIPTVALUE(density); COPY_PROPERTY_TO_QSCRIPTVALUE(lifetime); @@ -365,11 +365,11 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER_NO_SKIP(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(registrationPoint); + COPY_PROPERTY_TO_QSCRIPTVALUE(angularVelocity); COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); - COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR(color); + COPY_PROPERTY_TO_QSCRIPTVALUE(color); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(compoundShapeURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationURL); @@ -391,23 +391,23 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(simulatorID, getSimulatorIDAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(text); COPY_PROPERTY_TO_QSCRIPTVALUE(lineHeight); - COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR_GETTER(textColor, getTextColor()); - COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR_GETTER(backgroundColor, getBackgroundColor()); + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(textColor, getTextColor()); + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundColor, getBackgroundColor()); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(shapeType, getShapeTypeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(maxParticles); COPY_PROPERTY_TO_QSCRIPTVALUE(lifespan); COPY_PROPERTY_TO_QSCRIPTVALUE(emitRate); - COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(emitDirection); + COPY_PROPERTY_TO_QSCRIPTVALUE(emitDirection); COPY_PROPERTY_TO_QSCRIPTVALUE(emitStrength); COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); - COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR(keyLightColor); + COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightColor); COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightIntensity); COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightAmbientIntensity); - COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(keyLightDirection); + COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightDirection); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundMode, getBackgroundModeAsString()); // Sitting properties support @@ -1117,3 +1117,5 @@ AABox EntityItemProperties::getAABox() const { return AABox(rotatedExtentsRelativeToRegistrationPoint); } + + diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 96919dcbb3..5039c2b47a 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -86,63 +86,30 @@ changedProperties += P; \ } +inline QScriptValue convertScriptValue(QScriptEngine* e, const glm::vec3& v) { return vec3toScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, float v) { return QScriptValue(v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, int v) { return QScriptValue(v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, quint32 v) { return QScriptValue(v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QString& v) { return QScriptValue(v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const xColor& v) { return xColorToScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const glm::quat& v) { return quatToScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QScriptValue& v) { return v; } -#define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_VEC3(G,g,P,p) \ - if (!skipDefaults || defaultEntityProperties.get##G().get##P() != _##p) { \ +#define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(G,g,P,p) \ + if (!skipDefaults || defaultEntityProperties.get##G().get##P() != get##P()) { \ QScriptValue groupProperties = properties.property(#g); \ if (!groupProperties.isValid()) { \ groupProperties = engine->newObject(); \ } \ - QScriptValue V = vec3toScriptValue(engine, _##p); \ + QScriptValue V = convertScriptValue(engine, get##P()); \ groupProperties.setProperty(#p, V); \ properties.setProperty(#g, groupProperties); \ } -#define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(G,g,P,p) \ - if (!skipDefaults || defaultEntityProperties.get##G().get##P() != _##p) { \ - QScriptValue groupProperties = properties.property(#g); \ - if (!groupProperties.isValid()) { \ - groupProperties = engine->newObject(); \ - } \ - groupProperties.setProperty(#p, _##p); \ - properties.setProperty(#g, groupProperties); \ - } - - -#define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_COLOR(G,g,P,p) \ - if (!skipDefaults || defaultEntityProperties.get##G().get##P() != _##p) { \ - QScriptValue groupProperties = properties.property(#g); \ - if (!groupProperties.isValid()) { \ - groupProperties = engine->newObject(); \ - } \ - QScriptValue colorValue = xColorToScriptValue(engine, _##p); \ - groupProperties.setProperty(#p, colorValue); \ - properties.setProperty(#g, groupProperties); \ - } - - -#define COPY_PROPERTY_TO_QSCRIPTVALUE_VEC3(P) \ +#define COPY_PROPERTY_TO_QSCRIPTVALUE(P) \ if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - QScriptValue P = vec3toScriptValue(engine, _##P); \ - properties.setProperty(#P, P); \ - } - -#define COPY_PROPERTY_TO_QSCRIPTVALUE_QUAT(P) \ - if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - QScriptValue P = quatToScriptValue(engine, _##P); \ - properties.setProperty(#P, P); \ - } - -#define COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR(P) \ - if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - QScriptValue P = xColorToScriptValue(engine, _##P); \ - properties.setProperty(#P, P); \ - } - -#define COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR_GETTER(P,G) \ - if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - QScriptValue P = xColorToScriptValue(engine, G); \ - properties.setProperty(#P, P); \ + QScriptValue V = convertScriptValue(engine, _##P); \ + properties.setProperty(#P, V); \ } #define COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER_NO_SKIP(P, G) \ @@ -150,12 +117,8 @@ #define COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(P, G) \ if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - properties.setProperty(#P, G); \ - } - -#define COPY_PROPERTY_TO_QSCRIPTVALUE(P) \ - if (!skipDefaults || defaultEntityProperties._##P != _##P) { \ - properties.setProperty(#P, _##P); \ + QScriptValue V = convertScriptValue(engine, G); \ + properties.setProperty(#P, V); \ } #define COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(P, S) \ diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index cbbc9e72d9..fea0db9567 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -157,4 +157,5 @@ typedef PropertyFlags EntityPropertyFlags; // one greater than the last item property due to the enum's auto-incrementing. extern EntityPropertyList PROP_LAST_ITEM; + #endif // hifi_EntityPropertyFlags_h diff --git a/libraries/entities/src/SkyboxPropertyGroup.cpp b/libraries/entities/src/SkyboxPropertyGroup.cpp index 798511dc5b..a2b5b7dc2f 100644 --- a/libraries/entities/src/SkyboxPropertyGroup.cpp +++ b/libraries/entities/src/SkyboxPropertyGroup.cpp @@ -21,7 +21,7 @@ SkyboxPropertyGroup::SkyboxPropertyGroup() { } void SkyboxPropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { - COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_COLOR(Skybox, skybox, Color, color); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Skybox, skybox, Color, color); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Skybox, skybox, URL, url); }