History

change entity scripting interface methods to support pick filters

HifiExperiments committed 1 year ago

Commit 34f2ae01 parent d57ee2927 files · +124 −200Browse files

Showing the changes to libraries/entities/src/EntityScriptingInterface.cpp (1 of 27 files). Show all

Unified · Split

libraries/entities/src/EntityScriptingInterface.cpp+25−38
@@ -1360,14 +1360,13 @@ void EntityScriptingInterface::onDeletingEntity(EntityItem* entity) { · 1359 unmodified lines
13601360 }
13611361 }
13621362
1363−QUuid EntityScriptingInterface::findClosestEntity(const glm::vec3& center, float radius) const {
1363+QUuid EntityScriptingInterface::findClosestEntity(const glm::vec3& center, float radius, uint filter) const {
13641364 PROFILE_RANGE(script_entities, __FUNCTION__);
13651365
13661366 EntityItemID result;
13671367 if (_entityTree) {
1368− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
13691368 _entityTree->withReadLock([&] {
1370− result = _entityTree->evalClosestEntity(center, radius, PickFilter(searchFilter));
1369+ result = _entityTree->evalClosestEntity(center, radius, PickFilter(filter));
13711370 });
13721371 }
13731372 return result;
@@ -1382,34 +1381,32 @@ void EntityScriptingInterface::dumpTree() const { · 8 unmodified lines
13821381 }
13831382 }
13841383
1385−QVector<QUuid> EntityScriptingInterface::findEntities(const glm::vec3& center, float radius) const {
1384+QVector<QUuid> EntityScriptingInterface::findEntities(const glm::vec3& center, float radius, uint filter) const {
13861385 PROFILE_RANGE(script_entities, __FUNCTION__);
13871386
13881387 QVector<QUuid> result;
13891388 if (_entityTree) {
1390− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
13911389 _entityTree->withReadLock([&] {
1392− _entityTree->evalEntitiesInSphere(center, radius, PickFilter(searchFilter), result);
1390+ _entityTree->evalEntitiesInSphere(center, radius, PickFilter(filter), result);
13931391 });
13941392 }
13951393 return result;
13961394 }
13971395
1398−QVector<QUuid> EntityScriptingInterface::findEntitiesInBox(const glm::vec3& corner, const glm::vec3& dimensions) const {
1396+QVector<QUuid> EntityScriptingInterface::findEntitiesInBox(const glm::vec3& corner, const glm::vec3& dimensions, uint filter) const {
13991397 PROFILE_RANGE(script_entities, __FUNCTION__);
14001398
14011399 QVector<QUuid> result;
14021400 if (_entityTree) {
1403− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
14041401 _entityTree->withReadLock([&] {
14051402 AABox box(corner, dimensions);
1406− _entityTree->evalEntitiesInBox(box, PickFilter(searchFilter), result);
1403+ _entityTree->evalEntitiesInBox(box, PickFilter(filter), result);
14071404 });
14081405 }
14091406 return result;
14101407 }
14111408
1412−QVector<QUuid> EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frustum) const {
1409+QVector<QUuid> EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frustum, uint filter) const {
14131410 PROFILE_RANGE(script_entities, __FUNCTION__);
14141411
14151412 QVector<QUuid> result;
@@ -1439,9 +1436,8 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frust · 23 unmodified lines
14391436 viewFrustum.calculate();
14401437
14411438 if (_entityTree) {
1442− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
14431439 _entityTree->withReadLock([&] {
1444− _entityTree->evalEntitiesInFrustum(viewFrustum, PickFilter(searchFilter), result);
1440+ _entityTree->evalEntitiesInFrustum(viewFrustum, PickFilter(filter), result);
14451441 });
14461442 }
14471443 }
@@ -1449,62 +1445,53 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frust · 1 unmodified line
14491445 return result;
14501446 }
14511447
1452−QVector<QUuid> EntityScriptingInterface::findEntitiesByType(const QString entityType, const glm::vec3& center, float radius) const {
1448+QVector<QUuid> EntityScriptingInterface::findEntitiesByType(const QString entityType, const glm::vec3& center, float radius, uint filter) const {
14531449 EntityTypes::EntityType type = EntityTypes::getEntityTypeFromName(entityType);
14541450
14551451 QVector<QUuid> result;
14561452 if (_entityTree) {
1457− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
14581453 _entityTree->withReadLock([&] {
1459− _entityTree->evalEntitiesInSphereWithType(center, radius, type, PickFilter(searchFilter), result);
1454+ _entityTree->evalEntitiesInSphereWithType(center, radius, type, PickFilter(filter), result);
14601455 });
14611456 }
14621457 return result;
14631458 }
14641459
1465−QVector<QUuid> EntityScriptingInterface::findEntitiesByName(const QString entityName, const glm::vec3& center, float radius, bool caseSensitiveSearch) const {
1460+QVector<QUuid> EntityScriptingInterface::findEntitiesByName(const QString entityName,
1461+ const glm::vec3& center,
1462+ float radius,
1463+ bool caseSensitiveSearch,
1464+ uint filter) const {
14661465 QVector<QUuid> result;
14671466 if (_entityTree) {
14681467 _entityTree->withReadLock([&] {
1469− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1470− _entityTree->evalEntitiesInSphereWithName(center, radius, entityName, caseSensitiveSearch, PickFilter(searchFilter), result);
1468+ _entityTree->evalEntitiesInSphereWithName(center, radius, entityName, caseSensitiveSearch, PickFilter(filter), result);
14711469 });
14721470 }
14731471 return result;
14741472 }
14751473
1476−QVector<QUuid> EntityScriptingInterface::findEntitiesByTags(const QVector<QString> entityTags, const glm::vec3& center, float radius, bool caseSensitiveSearch) const {
1474+QVector<QUuid> EntityScriptingInterface::findEntitiesByTags(const QVector<QString> entityTags,
1475+ const glm::vec3& center,
1476+ float radius,
1477+ bool caseSensitiveSearch,
1478+ uint filter) const {
14771479 QVector<QUuid> result;
14781480 if (_entityTree) {
14791481 _entityTree->withReadLock([&] {
1480− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1481− _entityTree->evalEntitiesInSphereWithTags(center, radius, entityTags, caseSensitiveSearch, PickFilter(searchFilter), result);
1482+ _entityTree->evalEntitiesInSphereWithTags(center, radius, entityTags, caseSensitiveSearch, PickFilter(filter), result);
14821483 });
14831484 }
14841485 return result;
14851486 }
14861487
1487−RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking,
1488− const ScriptValue& entityIdsToInclude, const ScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) const {
1488+RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, uint filter,
1489+ const ScriptValue& entityIdsToInclude, const ScriptValue& entityIdsToDiscard) const {
14891490 PROFILE_RANGE(script_entities, __FUNCTION__);
14901491 QVector<EntityItemID> entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude);
14911492 QVector<EntityItemID> entitiesToDiscard = qVectorEntityItemIDFromScriptValue(entityIdsToDiscard);
14921493
1493− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1494−
1495− if (!precisionPicking) {
1496− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::COARSE);
1497− }
1498−
1499− if (visibleOnly) {
1500− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::VISIBLE);
1501− }
1502−
1503− if (collidableOnly) {
1504− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::COLLIDABLE);
1505− }
1506−
1507− return evalRayIntersectionWorker(ray, Octree::Lock, PickFilter(searchFilter), entitiesToInclude, entitiesToDiscard);
1494+ return evalRayIntersectionWorker(ray, Octree::Lock, PickFilter(filter), entitiesToInclude, entitiesToDiscard);
15081495 }
15091496
15101497 RayToEntityIntersectionResult EntityScriptingInterface::evalRayIntersectionVector(const PickRay& ray, PickFilter searchFilter,