History

Revert "Case 20200: Update EntityScriptingInterface to not find local entities"

Sam Gondelman committed 7 years ago

Commit 097d2d91 parent 21ec4e027 files · +635 −766Browse files

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

Unified · Split

libraries/entities/src/EntityScriptingInterface.cpp+83−45
@@ -1085,10 +1085,13 @@ QUuid EntityScriptingInterface::findClosestEntity(const glm::vec3& center, float · 1084 unmodified lines
10851085
10861086 EntityItemID result;
10871087 if (_entityTree) {
1088− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1088+ EntityItemPointer closestEntity;
10891089 _entityTree->withReadLock([&] {
1090− result = _entityTree->evalClosestEntity(center, radius, PickFilter(searchFilter));
1090+ closestEntity = _entityTree->findClosestEntity(center, radius);
10911091 });
1092+ if (closestEntity) {
1093+ result = closestEntity->getEntityItemID();
1094+ }
10921095 }
10931096 return result;
10941097 }
@@ -1107,10 +1110,14 @@ QVector<QUuid> EntityScriptingInterface::findEntities(const glm::vec3& center, f · 12 unmodified lines
11071110
11081111 QVector<QUuid> result;
11091112 if (_entityTree) {
1110− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1113+ QVector<EntityItemPointer> entities;
11111114 _entityTree->withReadLock([&] {
1112− _entityTree->evalEntitiesInSphere(center, radius, PickFilter(searchFilter), result);
1115+ _entityTree->findEntities(center, radius, entities);
11131116 });
1117+
1118+ foreach (EntityItemPointer entity, entities) {
1119+ result << entity->getEntityItemID();
1120+ }
11141121 }
11151122 return result;
11161123 }
@@ -1120,11 +1127,15 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesInBox(const glm::vec3& corn · 3 unmodified lines
11201127
11211128 QVector<QUuid> result;
11221129 if (_entityTree) {
1123− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1130+ QVector<EntityItemPointer> entities;
11241131 _entityTree->withReadLock([&] {
11251132 AABox box(corner, dimensions);
1126− _entityTree->evalEntitiesInBox(box, PickFilter(searchFilter), result);
1133+ _entityTree->findEntities(box, entities);
11271134 });
1135+
1136+ foreach (EntityItemPointer entity, entities) {
1137+ result << entity->getEntityItemID();
1138+ }
11281139 }
11291140 return result;
11301141 }
@@ -1159,10 +1170,14 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesInFrustum(QVariantMap frust · 28 unmodified lines
11591170 viewFrustum.calculate();
11601171
11611172 if (_entityTree) {
1162− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1173+ QVector<EntityItemPointer> entities;
11631174 _entityTree->withReadLock([&] {
1164− _entityTree->evalEntitiesInFrustum(viewFrustum, PickFilter(searchFilter), result);
1175+ _entityTree->findEntities(viewFrustum, entities);
11651176 });
1177+
1178+ foreach(EntityItemPointer entity, entities) {
1179+ result << entity->getEntityItemID();
1180+ }
11661181 }
11671182 }
11681183
@@ -1174,64 +1189,86 @@ QVector<QUuid> EntityScriptingInterface::findEntitiesByType(const QString entity · 5 unmodified lines
11741189
11751190 QVector<QUuid> result;
11761191 if (_entityTree) {
1177− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1192+ QVector<EntityItemPointer> entities;
11781193 _entityTree->withReadLock([&] {
1179− _entityTree->evalEntitiesInSphereWithType(center, radius, type, PickFilter(searchFilter), result);
1194+ _entityTree->findEntities(center, radius, entities);
11801195 });
1196+
1197+ foreach(EntityItemPointer entity, entities) {
1198+ if (entity->getType() == type) {
1199+ result << entity->getEntityItemID().toString();
1200+ }
1201+ }
11811202 }
11821203 return result;
11831204 }
11841205
11851206 QVector<QUuid> EntityScriptingInterface::findEntitiesByName(const QString entityName, const glm::vec3& center, float radius, bool caseSensitiveSearch) const {
1207+
11861208 QVector<QUuid> result;
11871209 if (_entityTree) {
1210+ QVector<EntityItemPointer> entities;
11881211 _entityTree->withReadLock([&] {
1189− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1190− _entityTree->evalEntitiesInSphereWithName(center, radius, entityName, caseSensitiveSearch, PickFilter(searchFilter), result);
1212+ _entityTree->findEntities(center, radius, entities);
11911213 });
1214+
1215+ if (caseSensitiveSearch) {
1216+ foreach(EntityItemPointer entity, entities) {
1217+ if (entity->getName() == entityName) {
1218+ result << entity->getEntityItemID();
1219+ }
1220+ }
1221+
1222+ } else {
1223+ QString entityNameLowerCase = entityName.toLower();
1224+
1225+ foreach(EntityItemPointer entity, entities) {
1226+ QString entityItemLowerCase = entity->getName().toLower();
1227+ if (entityItemLowerCase == entityNameLowerCase) {
1228+ result << entity->getEntityItemID();
1229+ }
1230+ }
1231+ }
11921232 }
11931233 return result;
11941234 }
11951235
1196−RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking,
1197− const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) const {
1198− PROFILE_RANGE(script_entities, __FUNCTION__);
1236+RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersection(const PickRay& ray, bool precisionPicking,
1237+ const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
11991238 QVector<EntityItemID> entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude);
12001239 QVector<EntityItemID> entitiesToDiscard = qVectorEntityItemIDFromScriptValue(entityIdsToDiscard);
12011240
1202− unsigned int searchFilter = PickFilter::getBitMask(PickFilter::FlagBit::DOMAIN_ENTITIES) | PickFilter::getBitMask(PickFilter::FlagBit::AVATAR_ENTITIES);
1203−
1204− if (!precisionPicking) {
1205− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::COARSE);
1206− }
1207−
1208− if (visibleOnly) {
1209− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::VISIBLE);
1210− }
1241+ return findRayIntersectionVector(ray, precisionPicking, entitiesToInclude, entitiesToDiscard, visibleOnly, collidableOnly);
1242+}
12111243
1212− if (collidableOnly) {
1213− searchFilter = searchFilter | PickFilter::getBitMask(PickFilter::FlagBit::COLLIDABLE);
1214− }
1244+RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersectionVector(const PickRay& ray, bool precisionPicking,
1245+ const QVector<EntityItemID>& entityIdsToInclude, const QVector<EntityItemID>& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
1246+ PROFILE_RANGE(script_entities, __FUNCTION__);
12151247
1216− return evalRayIntersectionWorker(ray, Octree::Lock, PickFilter(searchFilter), entitiesToInclude, entitiesToDiscard);
1248+ return findRayIntersectionWorker(ray, Octree::Lock, precisionPicking, entityIdsToInclude, entityIdsToDiscard, visibleOnly, collidableOnly);
12171249 }
12181250
1219−RayToEntityIntersectionResult EntityScriptingInterface::evalRayIntersectionVector(const PickRay& ray, PickFilter searchFilter,
1220− const QVector<EntityItemID>& entityIdsToInclude, const QVector<EntityItemID>& entityIdsToDiscard) {
1221− PROFILE_RANGE(script_entities, __FUNCTION__);
1251+// FIXME - we should remove this API and encourage all users to use findRayIntersection() instead. We've changed
1252+// findRayIntersection() to be blocking because it never makes sense for a script to get back a non-answer
1253+RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersectionBlocking(const PickRay& ray, bool precisionPicking,
1254+ const QScriptValue& entityIdsToInclude, const QScriptValue& entityIdsToDiscard) {
12221255
1223− return evalRayIntersectionWorker(ray, Octree::Lock, searchFilter, entityIdsToInclude, entityIdsToDiscard);
1256+ qWarning() << "Entities.findRayIntersectionBlocking() is obsolete, use Entities.findRayIntersection() instead.";
1257+ const QVector<EntityItemID>& entitiesToInclude = qVectorEntityItemIDFromScriptValue(entityIdsToInclude);
1258+ const QVector<EntityItemID> entitiesToDiscard = qVectorEntityItemIDFromScriptValue(entityIdsToDiscard);
1259+ return findRayIntersectionWorker(ray, Octree::Lock, precisionPicking, entitiesToInclude, entitiesToDiscard);
12241260 }
12251261
1226−RayToEntityIntersectionResult EntityScriptingInterface::evalRayIntersectionWorker(const PickRay& ray,
1227− Octree::lockType lockType, PickFilter searchFilter, const QVector<EntityItemID>& entityIdsToInclude,
1228− const QVector<EntityItemID>& entityIdsToDiscard) const {
1262+RayToEntityIntersectionResult EntityScriptingInterface::findRayIntersectionWorker(const PickRay& ray,
1263+ Octree::lockType lockType, bool precisionPicking, const QVector<EntityItemID>& entityIdsToInclude,
1264+ const QVector<EntityItemID>& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
1265+
12291266
12301267 RayToEntityIntersectionResult result;
12311268 if (_entityTree) {
12321269 OctreeElementPointer element;
1233− result.entityID = _entityTree->evalRayIntersection(ray.origin, ray.direction,
1234− entityIdsToInclude, entityIdsToDiscard, searchFilter,
1270+ result.entityID = _entityTree->findRayIntersection(ray.origin, ray.direction,
1271+ entityIdsToInclude, entityIdsToDiscard, visibleOnly, collidableOnly, precisionPicking,
12351272 element, result.distance, result.face, result.surfaceNormal,
12361273 result.extraInfo, lockType, &result.accurate);
12371274 result.intersects = !result.entityID.isNull();
@@ -1242,22 +1279,23 @@ RayToEntityIntersectionResult EntityScriptingInterface::evalRayIntersectionWorke · 4 unmodified lines
12421279 return result;
12431280 }
12441281
1245−ParabolaToEntityIntersectionResult EntityScriptingInterface::evalParabolaIntersectionVector(const PickParabola& parabola, PickFilter searchFilter,
1246− const QVector<EntityItemID>& entityIdsToInclude, const QVector<EntityItemID>& entityIdsToDiscard) {
1282+ParabolaToEntityIntersectionResult EntityScriptingInterface::findParabolaIntersectionVector(const PickParabola& parabola, bool precisionPicking,
1283+ const QVector<EntityItemID>& entityIdsToInclude, const QVector<EntityItemID>& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
12471284 PROFILE_RANGE(script_entities, __FUNCTION__);
12481285
1249− return evalParabolaIntersectionWorker(parabola, Octree::Lock, searchFilter, entityIdsToInclude, entityIdsToDiscard);
1286+ return findParabolaIntersectionWorker(parabola, Octree::Lock, precisionPicking, entityIdsToInclude, entityIdsToDiscard, visibleOnly, collidableOnly);
12501287 }
12511288
1252−ParabolaToEntityIntersectionResult EntityScriptingInterface::evalParabolaIntersectionWorker(const PickParabola& parabola,
1253− Octree::lockType lockType, PickFilter searchFilter, const QVector<EntityItemID>& entityIdsToInclude,
1254− const QVector<EntityItemID>& entityIdsToDiscard) const {
1289+ParabolaToEntityIntersectionResult EntityScriptingInterface::findParabolaIntersectionWorker(const PickParabola& parabola,
1290+ Octree::lockType lockType, bool precisionPicking, const QVector<EntityItemID>& entityIdsToInclude,
1291+ const QVector<EntityItemID>& entityIdsToDiscard, bool visibleOnly, bool collidableOnly) {
1292+
12551293
12561294 ParabolaToEntityIntersectionResult result;
12571295 if (_entityTree) {
12581296 OctreeElementPointer element;
1259− result.entityID = _entityTree->evalParabolaIntersection(parabola,
1260− entityIdsToInclude, entityIdsToDiscard, searchFilter,
1297+ result.entityID = _entityTree->findParabolaIntersection(parabola,
1298+ entityIdsToInclude, entityIdsToDiscard, visibleOnly, collidableOnly, precisionPicking,
12611299 element, result.intersection, result.distance, result.parabolicDistance, result.face, result.surfaceNormal,
12621300 result.extraInfo, lockType, &result.accurate);
12631301 result.intersects = !result.entityID.isNull();