mirror of
https://github.com/overte-org/overte.git
synced 2025-08-07 01:09:27 +02:00
Merge pull request #12796 from MiladNazeri/feature/add-findByName
added Entities.findbyName
This commit is contained in:
commit
cb7b03652b
2 changed files with 45 additions and 0 deletions
|
@ -766,6 +766,36 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesByType(const QString entity
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<QUuid> EntityScriptingInterface::findEntitiesByName(const QString entityName, const glm::vec3& center, float radius, bool caseSensitiveSearch) const {
|
||||||
|
|
||||||
|
QVector<QUuid> result;
|
||||||
|
if (_entityTree) {
|
||||||
|
QVector<EntityItemPointer> entities;
|
||||||
|
_entityTree->withReadLock([&] {
|
||||||
|
_entityTree->findEntities(center, radius, entities);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (caseSensitiveSearch) {
|
||||||
|
foreach(EntityItemPointer entity, entities) {
|
||||||
|
if (entity->getName() == entityName) {
|
||||||
|
result << entity->getEntityItemID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
QString entityNameLowerCase = entityName.toLower();
|
||||||
|
|
||||||
|
foreach(EntityItemPointer entity, entities) {
|
||||||
|
QString entityItemLowerCase = entity->getName().toLower();
|
||||||
|
if (entityItemLowerCase == entityNameLowerCase) {
|
||||||
|
result << entity->getEntityItemID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking,
|
RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking,
|
||||||
const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
|
const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
|
||||||
QVector<EntityItemID> entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude);
|
QVector<EntityItemID> entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude);
|
||||||
|
|
|
@ -387,6 +387,21 @@ public slots:
|
||||||
/// this function will not find any entities in script engine contexts which don't have access to entities
|
/// this function will not find any entities in script engine contexts which don't have access to entities
|
||||||
Q_INVOKABLE QVector<QUuid> findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const;
|
Q_INVOKABLE QVector<QUuid> findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const;
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* Find all entities of a particular name that intersect a sphere defined by a center point and radius.
|
||||||
|
* @function Entities.findEntitiesByName
|
||||||
|
* @param {Entities.EntityType} entityName - The name of the entity to search for.
|
||||||
|
* @param {Vec3} center - The point about which to search.
|
||||||
|
* @param {number} radius - The radius within which to search.
|
||||||
|
* @param {bool} caseSensitiveSearch - Choose whether to to return case sensitive results back.
|
||||||
|
* @returns {Uuid[]} An array of entity IDs of the specified type that intersect the search sphere. The array is empty if
|
||||||
|
* no entities could be found.
|
||||||
|
* @example <caption>Get back a list of entities</caption>
|
||||||
|
* var entityIDs = Entities.findEntitiesByName("Light-Target", MyAvatar.position, 10, false);
|
||||||
|
* print("Number of Entities with the name Light-Target " + entityIDs.length);
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE QVector<QUuid> findEntitiesByName(const QString entityName, const glm::vec3& center, float radius, bool caseSensitiveSearch = false ) const;
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Find the first entity intersected by a {@link PickRay}. <code>Light</code> and <code>Zone</code> entities are not
|
* Find the first entity intersected by a {@link PickRay}. <code>Light</code> and <code>Zone</code> entities are not
|
||||||
* intersected unless they've been configured as pickable using {@link Entities.setLightsArePickable|setLightsArePickable}
|
* intersected unless they've been configured as pickable using {@link Entities.setLightsArePickable|setLightsArePickable}
|
||||||
|
|
Loading…
Reference in a new issue