From 74f482b36133640d52725e6149e6af64c48ae28f Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Mon, 20 Aug 2018 10:15:28 -0700 Subject: [PATCH] Revert "Convert entityIntersections/avatarIntersections lists in" This reverts commit aa4a6b2eaedb8f578d7bcd2a2dcd7a4e112028f0. --- interface/src/raypick/CollisionPick.cpp | 36 ++++++++++++------------- interface/src/raypick/CollisionPick.h | 16 +++++------ libraries/physics/src/PhysicsEngine.cpp | 9 ++++--- libraries/physics/src/PhysicsEngine.h | 2 +- 4 files changed, 30 insertions(+), 33 deletions(-) diff --git a/interface/src/raypick/CollisionPick.cpp b/interface/src/raypick/CollisionPick.cpp index 004017ca15..b93c5b6dbb 100644 --- a/interface/src/raypick/CollisionPick.cpp +++ b/interface/src/raypick/CollisionPick.cpp @@ -19,19 +19,19 @@ PickResultPointer CollisionPickResult::compareAndProcessNewResult(const PickResultPointer& newRes) { const std::shared_ptr newCollisionResult = std::static_pointer_cast(newRes); - if (entityIntersections->size()) { - entityIntersections->insert(entityIntersections->cend(), newCollisionResult->entityIntersections->begin(), newCollisionResult->entityIntersections->end()); + if (entityIntersections.size()) { + entityIntersections.insert(entityIntersections.cend(), newCollisionResult->entityIntersections.begin(), newCollisionResult->entityIntersections.end()); } else { entityIntersections = newCollisionResult->entityIntersections; } - if (avatarIntersections->size()) { - avatarIntersections->insert(avatarIntersections->cend(), newCollisionResult->avatarIntersections->begin(), newCollisionResult->avatarIntersections->end()); + if (avatarIntersections.size()) { + avatarIntersections.insert(avatarIntersections.cend(), newCollisionResult->avatarIntersections.begin(), newCollisionResult->avatarIntersections.end()); } else { avatarIntersections = newCollisionResult->avatarIntersections; } - intersects = entityIntersections->size() || avatarIntersections->size(); + intersects = entityIntersections.size() || avatarIntersections.size(); if (newCollisionResult->loadState == LOAD_STATE_NOT_LOADED || loadState == LOAD_STATE_UNKNOWN) { loadState = (LoadState)newCollisionResult->loadState; } @@ -39,8 +39,8 @@ PickResultPointer CollisionPickResult::compareAndProcessNewResult(const PickResu return std::make_shared(*this); } -void buildObjectIntersectionsMap(IntersectionType intersectionType, const std::shared_ptr> objectIntersections, std::unordered_map& intersections, std::unordered_map& collisionPointPairs) { - for (auto& objectIntersection : *objectIntersections) { +void buildObjectIntersectionsMap(IntersectionType intersectionType, const std::vector& objectIntersections, std::unordered_map& intersections, std::unordered_map& collisionPointPairs) { + for (auto& objectIntersection : objectIntersections) { auto at = intersections.find(objectIntersection.foundID); if (at == intersections.end()) { QVariantMap intersectingObject; @@ -332,7 +332,7 @@ CollisionRegion CollisionPick::getMathematicalPick() const { return _mathPick; } -void CollisionPick::filterIntersections(std::shared_ptr> intersections) const { +void CollisionPick::filterIntersections(std::vector& intersections) const { const QVector& ignoreItems = getIgnoreItems(); const QVector& includeItems = getIncludeItems(); bool isWhitelist = !includeItems.empty(); @@ -341,13 +341,13 @@ void CollisionPick::filterIntersections(std::shared_ptrsize(); + int n = (int)intersections.size(); for (int i = 0; i < n; i++) { - auto& intersection = (*intersections)[i]; + auto& intersection = intersections[i]; const QUuid& id = intersection.foundID; if (ignoreItems.contains(id) || (isWhitelist && !includeItems.contains(id))) { - intersection = (*intersections)[--n]; - intersections->pop_back(); + intersections[i] = intersections[--n]; + intersections.pop_back(); } } } @@ -355,29 +355,29 @@ void CollisionPick::filterIntersections(std::shared_ptr(pick.toVariantMap(), CollisionPickResult::LOAD_STATE_NOT_LOADED, std::make_shared>(), std::make_shared>()); + return std::make_shared(pick.toVariantMap(), CollisionPickResult::LOAD_STATE_NOT_LOADED, std::vector(), std::vector()); } auto& entityIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_ENTITIES, *pick.shapeInfo, pick.transform); filterIntersections(entityIntersections); - return std::make_shared(pick, CollisionPickResult::LOAD_STATE_LOADED, entityIntersections, std::make_shared>()); + return std::make_shared(pick, CollisionPickResult::LOAD_STATE_LOADED, entityIntersections, std::vector()); } PickResultPointer CollisionPick::getOverlayIntersection(const CollisionRegion& pick) { - return std::make_shared(pick.toVariantMap(), isShapeInfoReady() ? CollisionPickResult::LOAD_STATE_LOADED : CollisionPickResult::LOAD_STATE_NOT_LOADED, std::make_shared>(), std::make_shared>()); + return std::make_shared(pick.toVariantMap(), isShapeInfoReady() ? CollisionPickResult::LOAD_STATE_LOADED : CollisionPickResult::LOAD_STATE_NOT_LOADED, std::vector(), std::vector()); } PickResultPointer CollisionPick::getAvatarIntersection(const CollisionRegion& pick) { if (!isShapeInfoReady()) { // Cannot compute result - return std::make_shared(pick.toVariantMap(), CollisionPickResult::LOAD_STATE_NOT_LOADED, std::make_shared>(), std::make_shared>()); + return std::make_shared(pick.toVariantMap(), CollisionPickResult::LOAD_STATE_NOT_LOADED, std::vector(), std::vector()); } auto &avatarIntersections = _physicsEngine->contactTest(USER_COLLISION_MASK_AVATARS, *pick.shapeInfo, pick.transform); filterIntersections(avatarIntersections); - return std::make_shared(pick, CollisionPickResult::LOAD_STATE_LOADED, std::make_shared>(), avatarIntersections); + return std::make_shared(pick, CollisionPickResult::LOAD_STATE_LOADED, std::vector(), avatarIntersections); } PickResultPointer CollisionPick::getHUDIntersection(const CollisionRegion& pick) { - return std::make_shared(pick.toVariantMap(), isShapeInfoReady() ? CollisionPickResult::LOAD_STATE_LOADED : CollisionPickResult::LOAD_STATE_NOT_LOADED, std::make_shared>(), std::make_shared>()); + return std::make_shared(pick.toVariantMap(), isShapeInfoReady() ? CollisionPickResult::LOAD_STATE_LOADED : CollisionPickResult::LOAD_STATE_NOT_LOADED, std::vector(), std::vector()); } \ No newline at end of file diff --git a/interface/src/raypick/CollisionPick.h b/interface/src/raypick/CollisionPick.h index 40f2450776..6631238737 100644 --- a/interface/src/raypick/CollisionPick.h +++ b/interface/src/raypick/CollisionPick.h @@ -24,14 +24,10 @@ public: CollisionPickResult() {} CollisionPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {} - CollisionPickResult(const CollisionRegion& searchRegion, - LoadState loadState, - std::shared_ptr> entityIntersections = std::make_shared>(), - std::shared_ptr> avatarIntersections = std::make_shared>() - ) : + CollisionPickResult(const CollisionRegion& searchRegion, LoadState loadState, const std::vector& entityIntersections, const std::vector& avatarIntersections) : PickResult(searchRegion.toVariantMap()), loadState(loadState), - intersects(entityIntersections->size() || avatarIntersections->size()), + intersects(entityIntersections.size() || avatarIntersections.size()), entityIntersections(entityIntersections), avatarIntersections(avatarIntersections) { } @@ -45,8 +41,8 @@ public: LoadState loadState { LOAD_STATE_UNKNOWN }; bool intersects { false }; - std::shared_ptr> entityIntersections { std::make_shared>() }; - std::shared_ptr> avatarIntersections { std::make_shared>() }; + std::vector entityIntersections; + std::vector avatarIntersections; QVariantMap toVariantMap() const override; @@ -69,7 +65,7 @@ public: CollisionRegion getMathematicalPick() const override; PickResultPointer getDefaultResult(const QVariantMap& pickVariant) const override { - return std::make_shared(pickVariant, CollisionPickResult::LOAD_STATE_UNKNOWN, std::make_shared>(), std::make_shared>()); + return std::make_shared(pickVariant, CollisionPickResult::LOAD_STATE_UNKNOWN, std::vector(), std::vector()); } PickResultPointer getEntityIntersection(const CollisionRegion& pick) override; PickResultPointer getOverlayIntersection(const CollisionRegion& pick) override; @@ -80,7 +76,7 @@ protected: // Returns true if pick.shapeInfo is valid. Otherwise, attempts to get the shapeInfo ready for use. bool isShapeInfoReady(); void computeShapeInfo(CollisionRegion& pick, ShapeInfo& shapeInfo, QSharedPointer resource); - void filterIntersections(std::shared_ptr> intersections) const; + void filterIntersections(std::vector& intersections) const; CollisionRegion _mathPick; PhysicsEnginePointer _physicsEngine; diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 37afadc21b..5685e8a6f3 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -867,6 +867,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback { AllContactsCallback(int32_t mask, int32_t group, const ShapeInfo& shapeInfo, const Transform& transform, btCollisionObject* myAvatarCollisionObject) : btCollisionWorld::ContactResultCallback(), collisionObject(), + contacts(), myAvatarCollisionObject(myAvatarCollisionObject) { const btCollisionShape* collisionShape = ObjectMotionState::getShapeManager()->getShape(shapeInfo); @@ -887,7 +888,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback { } btCollisionObject collisionObject; - std::shared_ptr> contacts = std::make_shared>(); + std::vector contacts; btCollisionObject* myAvatarCollisionObject; btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1) override { @@ -906,7 +907,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback { // TODO: Give MyAvatar a motion state so we don't have to do this if ((m_collisionFilterMask & BULLET_COLLISION_GROUP_MY_AVATAR) && myAvatarCollisionObject && myAvatarCollisionObject == otherBody) { - contacts->emplace_back(Physics::getSessionUUID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint)); + contacts.emplace_back(Physics::getSessionUUID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint)); return 0; } @@ -922,7 +923,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback { } // This is the correct object type. Add it to the list. - contacts->emplace_back(candidate->getObjectID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint)); + contacts.emplace_back(candidate->getObjectID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint)); return 0; } @@ -933,7 +934,7 @@ protected: } }; -std::shared_ptr> PhysicsEngine::contactTest(uint16_t mask, const ShapeInfo& regionShapeInfo, const Transform& regionTransform, uint16_t group) const { +std::vector PhysicsEngine::contactTest(uint16_t mask, const ShapeInfo& regionShapeInfo, const Transform& regionTransform, uint16_t group) const { // TODO: Give MyAvatar a motion state so we don't have to do this btCollisionObject* myAvatarCollisionObject = nullptr; if ((mask & USER_COLLISION_GROUP_MY_AVATAR) && _myAvatarController) { diff --git a/libraries/physics/src/PhysicsEngine.h b/libraries/physics/src/PhysicsEngine.h index 7c4d5392d6..c6e165632b 100644 --- a/libraries/physics/src/PhysicsEngine.h +++ b/libraries/physics/src/PhysicsEngine.h @@ -127,7 +127,7 @@ public: // Function for getting colliding objects in the world of specified type // See PhysicsCollisionGroups.h for mask flags. - std::shared_ptr> contactTest(uint16_t mask, const ShapeInfo& regionShapeInfo, const Transform& regionTransform, uint16_t group = USER_COLLISION_GROUP_DYNAMIC) const; + std::vector contactTest(uint16_t mask, const ShapeInfo& regionShapeInfo, const Transform& regionTransform, uint16_t group = USER_COLLISION_GROUP_DYNAMIC) const; private: QList removeDynamicsForBody(btRigidBody* body);