From 08eb6442b5c3ada5b4f07c8aa5b77260b7b79b29 Mon Sep 17 00:00:00 2001 From: Liv Date: Mon, 15 May 2017 18:36:36 -0700 Subject: [PATCH 1/4] Add function findEntitiesByType EntityScriptingInterface Updated EntityScriptingInterface.cpp and .h to create a new function for the Entities API that can be called to filter out entities found by a specific entity type. --- .../entities/src/EntityScriptingInterface.cpp | 20 +++++++++++++++++++ .../entities/src/EntityScriptingInterface.h | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index ffb65a2dba..e2726dada2 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -662,6 +662,26 @@ QVector EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frust return result; } +QVector EntityScriptingInterface::findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const { + EntityTypes::EntityType type = EntityTypes::getEntityTypeFromName(entityType); + + QVector result; + if (_entityTree) { + QVector entities; + _entityTree->withReadLock([&] { + _entityTree->findEntities(center, radius, entities); + }); + + foreach(EntityItemPointer entity, entities) { + if (entity->getType() == type) + { + result << entity->getEntityItemID(); + } + } + } + return result; +} + RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking, const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) { PROFILE_RANGE(script_entities, __FUNCTION__); diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index f5656860e3..5e1d5ecf61 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -215,6 +215,13 @@ public slots: /// this function will not find any models in script engine contexts which don't have access to models Q_INVOKABLE QVector findEntitiesInFrustum(QVariantMap frustum) const; + /// finds models within a sphere given by the center point and radius + /// @param {QString} string representation of entity type + /// @param {vec3} center point + /// @param {float} radius to search + /// this function will not find any models in script engine contexts which don't have access to models + Q_INVOKABLE QVector findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const; + /// If the scripting context has visible entities, this will determine a ray intersection, the results /// may be inaccurate if the engine is unable to access the visible entities, in which case result.accurate /// will be false. From a606f8a8d46810820f7b4ff6d9b695476ad7ac10 Mon Sep 17 00:00:00 2001 From: Liv Erickson Date: Mon, 15 May 2017 20:28:48 -0700 Subject: [PATCH 2/4] Fixing code style --- libraries/entities/src/EntityScriptingInterface.cpp | 3 +-- libraries/entities/src/EntityScriptingInterface.h | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index e2726dada2..ab2f342a12 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -673,8 +673,7 @@ QVector EntityScriptingInterface::findEntitiesByType(const QString entity }); foreach(EntityItemPointer entity, entities) { - if (entity->getType() == type) - { + if (entity->getType() == type){ result << entity->getEntityItemID(); } } diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 5e1d5ecf61..ac176f6267 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -212,14 +212,14 @@ public slots: /// - orientation /// - projection /// - centerRadius - /// this function will not find any models in script engine contexts which don't have access to models + /// this function will not find any models in script engine contexts which don't have access to entities Q_INVOKABLE QVector findEntitiesInFrustum(QVariantMap frustum) const; /// finds models within a sphere given by the center point and radius /// @param {QString} string representation of entity type /// @param {vec3} center point /// @param {float} radius to search - /// this function will not find any models in script engine contexts which don't have access to models + /// this function will not find any entities in script engine contexts which don't have access to models Q_INVOKABLE QVector findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const; /// If the scripting context has visible entities, this will determine a ray intersection, the results From ae458dcbcfaf32f1c9da0a0a752e8fc8fa506935 Mon Sep 17 00:00:00 2001 From: Liv Erickson Date: Mon, 15 May 2017 20:33:22 -0700 Subject: [PATCH 3/4] changing models to more generally reference entities in comment --- libraries/entities/src/EntityScriptingInterface.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index ac176f6267..575528fa78 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -215,11 +215,11 @@ public slots: /// this function will not find any models in script engine contexts which don't have access to entities Q_INVOKABLE QVector findEntitiesInFrustum(QVariantMap frustum) const; - /// finds models within a sphere given by the center point and radius + /// finds entities of the indicated type within a sphere given by the center point and radius /// @param {QString} string representation of entity type /// @param {vec3} center point /// @param {float} radius to search - /// this function will not find any entities in script engine contexts which don't have access to models + /// this function will not find any entities in script engine contexts which don't have access to entities Q_INVOKABLE QVector findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const; /// If the scripting context has visible entities, this will determine a ray intersection, the results From 32fd905918c5dd480e8e6378f63305a75864da9d Mon Sep 17 00:00:00 2001 From: Liv Erickson Date: Mon, 15 May 2017 20:49:30 -0700 Subject: [PATCH 4/4] style pass --- libraries/entities/src/EntityScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index ab2f342a12..b184d648da 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -673,7 +673,7 @@ QVector EntityScriptingInterface::findEntitiesByType(const QString entity }); foreach(EntityItemPointer entity, entities) { - if (entity->getType() == type){ + if (entity->getType() == type) { result << entity->getEntityItemID(); } }