From d6e3b85237ea96e66634f037bf00691456b7b352 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 18 Jan 2016 11:15:32 -0800 Subject: [PATCH] fix javascript access via localPosition and localRotation --- libraries/entities/src/EntityItem.cpp | 2 ++ libraries/entities/src/EntityItem.h | 2 ++ .../entities/src/EntityItemProperties.cpp | 13 +++++++++++-- .../entities/src/EntityScriptingInterface.cpp | 18 +++++++++++++++++- .../entities/src/EntityScriptingInterface.h | 2 ++ 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 0a7a30f098..a6835dff41 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1057,6 +1057,8 @@ EntityItemProperties EntityItem::getProperties(EntityPropertyFlags desiredProper COPY_ENTITY_PROPERTY_TO_PROPERTIES(parentID, getParentID); COPY_ENTITY_PROPERTY_TO_PROPERTIES(parentJointIndex, getParentJointIndex); COPY_ENTITY_PROPERTY_TO_PROPERTIES(queryAACube, getQueryAACube); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(localPosition, getLocalPosition); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(localRotation, getLocalOrientation); properties._defaultSettings = false; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index d0b79723d1..7507893b3d 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -395,6 +395,8 @@ public: virtual bool setAbsoluteJointRotationInObjectFrame(int index, const glm::quat& rotation) override { return false; } virtual bool setAbsoluteJointTranslationInObjectFrame(int index, const glm::vec3& translation) override { return false; } + virtual int getJointIndex(const QString& name) const { return -1; } + virtual void loader() {} // called indirectly when urls for geometry are updated protected: diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index f8dcb6ee56..d1a5b8d9ee 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -321,6 +321,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_JOINT_TRANSLATIONS_SET, jointTranslationsSet); CHECK_PROPERTY_CHANGE(PROP_JOINT_TRANSLATIONS, jointTranslations); CHECK_PROPERTY_CHANGE(PROP_QUERY_AA_CUBE, queryAACube); + CHECK_PROPERTY_CHANGE(PROP_LOCAL_POSITION, localPosition); + CHECK_PROPERTY_CHANGE(PROP_LOCAL_ROTATION, localRotation); changedProperties += _animation.getChangedProperties(); changedProperties += _keyLight.getChangedProperties(); @@ -415,8 +417,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA_START, alphaStart); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA_FINISH, alphaFinish); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EMITTER_SHOULD_TRAIL, emitterShouldTrail); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_LOCAL_POSITION, localPosition); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_LOCAL_ROTATION, localRotation); } // Models only @@ -432,6 +432,12 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool if (_type == EntityTypes::Model || _type == EntityTypes::Zone || _type == EntityTypes::ParticleEffect) { COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SHAPE_TYPE, shapeType, getShapeTypeAsString()); } + if (_type == EntityTypes::Box) { + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SHAPE_TYPE, shapeType, QString("Box")); + } + if (_type == EntityTypes::Sphere) { + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SHAPE_TYPE, shapeType, QString("Sphere")); + } // FIXME - it seems like ParticleEffect should also support this if (_type == EntityTypes::Model || _type == EntityTypes::Zone) { @@ -822,6 +828,9 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_PROPERTY_TO_MAP(PROP_PARENT_ID, ParentID, parentID, QUuid); ADD_PROPERTY_TO_MAP(PROP_PARENT_JOINT_INDEX, ParentJointIndex, parentJointIndex, uint16_t); + ADD_PROPERTY_TO_MAP(PROP_LOCAL_POSITION, LocalPosition, localPosition, glm::vec3); + ADD_PROPERTY_TO_MAP(PROP_LOCAL_ROTATION, LocalRotation, localRotation, glm::quat); + ADD_PROPERTY_TO_MAP(PROP_JOINT_ROTATIONS_SET, JointRotationsSet, jointRotationsSet, QVector); ADD_PROPERTY_TO_MAP(PROP_JOINT_ROTATIONS, JointRotations, jointRotations, QVector); ADD_PROPERTY_TO_MAP(PROP_JOINT_TRANSLATIONS_SET, JointTranslationsSet, jointTranslationsSet, QVector); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 4e2052c283..f78cd4fd8c 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -178,6 +178,15 @@ EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identit desiredProperties.setHasProperty(PROP_PARENT_JOINT_INDEX); } + if (desiredProperties.isEmpty()) { + // these are left out of EntityItem::getEntityProperties so that localPosition and localRotation + // don't end up in json saves, etc. We still want them here, though. + EncodeBitstreamParams params; // unknown + desiredProperties = entity->getEntityProperties(params); + desiredProperties.setHasProperty(PROP_LOCAL_POSITION); + desiredProperties.setHasProperty(PROP_LOCAL_ROTATION); + } + results = entity->getProperties(desiredProperties); // TODO: improve sitting points and naturalDimensions in the future, @@ -956,7 +965,6 @@ bool EntityScriptingInterface::setAbsoluteJointTranslationsInObjectFrame(const Q return false; } - bool EntityScriptingInterface::setAbsoluteJointsDataInObjectFrame(const QUuid& entityID, const QVector& rotations, const QVector& translations) { @@ -964,3 +972,11 @@ bool EntityScriptingInterface::setAbsoluteJointsDataInObjectFrame(const QUuid& e return setAbsoluteJointRotationsInObjectFrame(entityID, rotations) || setAbsoluteJointTranslationsInObjectFrame(entityID, translations); } + +int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString& name) { + if (!_entityTree) { + return -1; + } + EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); + return entity->getJointIndex(name); +} diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 5c22d7f6b8..e7a4c0e071 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -161,6 +161,8 @@ public slots: const QVector& rotations, const QVector& translations); + Q_INVOKABLE int getJointIndex(const QUuid& entityID, const QString& name); + signals: void collisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);