Re-name EntityIntersection to ContactTestResult and remove its default constructor, plus update related variables

This commit is contained in:
sabrina-shanman 2018-07-30 16:45:31 -07:00
parent fadc094a01
commit de7d974336
4 changed files with 41 additions and 41 deletions

View file

@ -271,8 +271,8 @@ PickResultPointer CollisionPick::getEntityIntersection(const CollisionRegion& pi
return std::make_shared<CollisionPickResult>(); return std::make_shared<CollisionPickResult>();
} }
const auto& intersectingEntities = _physicsEngine->getCollidingInRegion(MOTIONSTATE_TYPE_ENTITY, pick.shapeInfo, pick.transform); const auto& entityIntersections = _physicsEngine->getCollidingInRegion(MOTIONSTATE_TYPE_ENTITY, pick.shapeInfo, pick.transform);
return std::make_shared<CollisionPickResult>(pick, intersectingEntities, std::vector<EntityIntersection>()); return std::make_shared<CollisionPickResult>(pick, entityIntersections, std::vector<ContactTestResult>());
} }
PickResultPointer CollisionPick::getOverlayIntersection(const CollisionRegion& pick) { PickResultPointer CollisionPick::getOverlayIntersection(const CollisionRegion& pick) {
@ -285,8 +285,8 @@ PickResultPointer CollisionPick::getAvatarIntersection(const CollisionRegion& pi
return std::make_shared<CollisionPickResult>(); return std::make_shared<CollisionPickResult>();
} }
const auto& intersectingAvatars = _physicsEngine->getCollidingInRegion(MOTIONSTATE_TYPE_AVATAR, pick.shapeInfo, pick.transform); const auto& avatarIntersections = _physicsEngine->getCollidingInRegion(MOTIONSTATE_TYPE_AVATAR, pick.shapeInfo, pick.transform);
return std::make_shared<CollisionPickResult>(pick, std::vector<EntityIntersection>(), intersectingAvatars); return std::make_shared<CollisionPickResult>(pick, std::vector<ContactTestResult>(), avatarIntersections);
} }
PickResultPointer CollisionPick::getHUDIntersection(const CollisionRegion& pick) { PickResultPointer CollisionPick::getHUDIntersection(const CollisionRegion& pick) {

View file

@ -18,22 +18,22 @@ public:
CollisionPickResult() {} CollisionPickResult() {}
CollisionPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {} CollisionPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {}
CollisionPickResult(const CollisionRegion& searchRegion, const std::vector<EntityIntersection>& intersectingEntities, const std::vector<EntityIntersection>& intersectingAvatars) : CollisionPickResult(const CollisionRegion& searchRegion, const std::vector<ContactTestResult>& entityIntersections, const std::vector<ContactTestResult>& avatarIntersections) :
PickResult(searchRegion.toVariantMap()), PickResult(searchRegion.toVariantMap()),
intersects(intersectingEntities.size() || intersectingAvatars.size()), intersects(entityIntersections.size() || avatarIntersections.size()),
intersectingEntities(intersectingEntities), entityIntersections(entityIntersections),
intersectingAvatars(intersectingAvatars) { avatarIntersections(avatarIntersections) {
} }
CollisionPickResult(const CollisionPickResult& collisionPickResult) : PickResult(collisionPickResult.pickVariant) { CollisionPickResult(const CollisionPickResult& collisionPickResult) : PickResult(collisionPickResult.pickVariant) {
intersectingAvatars = collisionPickResult.intersectingAvatars; avatarIntersections = collisionPickResult.avatarIntersections;
intersectingEntities = collisionPickResult.intersectingEntities; entityIntersections = collisionPickResult.entityIntersections;
intersects = intersectingAvatars.size() || intersectingEntities.size(); intersects = avatarIntersections.size() || entityIntersections.size();
} }
bool intersects { false }; bool intersects { false };
std::vector<EntityIntersection> intersectingEntities; std::vector<ContactTestResult> entityIntersections;
std::vector<EntityIntersection> intersectingAvatars; std::vector<ContactTestResult> avatarIntersections;
virtual QVariantMap toVariantMap() const override { virtual QVariantMap toVariantMap() const override {
QVariantMap variantMap; QVariantMap variantMap;
@ -41,21 +41,21 @@ public:
variantMap["intersects"] = intersects; variantMap["intersects"] = intersects;
QVariantList qEntityIntersections; QVariantList qEntityIntersections;
for (auto intersectingEntity : intersectingEntities) { for (auto entityIntersection : entityIntersections) {
QVariantMap qEntityIntersection; QVariantMap qEntityIntersection;
qEntityIntersection["objectID"] = intersectingEntity.id; qEntityIntersection["objectID"] = entityIntersection.foundID;
qEntityIntersection["pickCollisionPoint"] = vec3toVariant(intersectingEntity.testCollisionPoint); qEntityIntersection["pickCollisionPoint"] = vec3toVariant(entityIntersection.testCollisionPoint);
qEntityIntersection["entityCollisionPoint"] = vec3toVariant(intersectingEntity.foundCollisionPoint); qEntityIntersection["entityCollisionPoint"] = vec3toVariant(entityIntersection.foundCollisionPoint);
qEntityIntersections.append(qEntityIntersection); qEntityIntersections.append(qEntityIntersection);
} }
variantMap["entityIntersections"] = qEntityIntersections; variantMap["entityIntersections"] = qEntityIntersections;
QVariantList qAvatarIntersections; QVariantList qAvatarIntersections;
for (auto intersectingAvatar : intersectingAvatars) { for (auto avatarIntersection : avatarIntersections) {
QVariantMap qAvatarIntersection; QVariantMap qAvatarIntersection;
qAvatarIntersection["objectID"] = intersectingAvatar.id; qAvatarIntersection["objectID"] = avatarIntersection.foundID;
qAvatarIntersection["pickCollisionPoint"] = vec3toVariant(intersectingAvatar.testCollisionPoint); qAvatarIntersection["pickCollisionPoint"] = vec3toVariant(avatarIntersection.testCollisionPoint);
qAvatarIntersection["entityCollisionPoint"] = vec3toVariant(intersectingAvatar.foundCollisionPoint); qAvatarIntersection["entityCollisionPoint"] = vec3toVariant(avatarIntersection.foundCollisionPoint);
qAvatarIntersections.append(qAvatarIntersection); qAvatarIntersections.append(qAvatarIntersection);
} }
variantMap["avatarIntersections"] = qAvatarIntersections; variantMap["avatarIntersections"] = qAvatarIntersections;
@ -71,14 +71,14 @@ public:
PickResultPointer compareAndProcessNewResult(const PickResultPointer& newRes) override { PickResultPointer compareAndProcessNewResult(const PickResultPointer& newRes) override {
const std::shared_ptr<CollisionPickResult> newCollisionResult = std::static_pointer_cast<CollisionPickResult>(newRes); const std::shared_ptr<CollisionPickResult> newCollisionResult = std::static_pointer_cast<CollisionPickResult>(newRes);
for (EntityIntersection& intersectingEntity : newCollisionResult->intersectingEntities) { for (ContactTestResult& entityIntersection : newCollisionResult->entityIntersections) {
intersectingEntities.push_back(intersectingEntity); entityIntersections.push_back(entityIntersection);
} }
for (EntityIntersection& intersectingAvatar : newCollisionResult->intersectingAvatars) { for (ContactTestResult& avatarIntersection : newCollisionResult->avatarIntersections) {
intersectingAvatars.push_back(intersectingAvatar); avatarIntersections.push_back(avatarIntersection);
} }
intersects = intersectingEntities.size() || intersectingAvatars.size(); intersects = entityIntersections.size() || avatarIntersections.size();
return std::make_shared<CollisionPickResult>(*this); return std::make_shared<CollisionPickResult>(*this);
} }

View file

@ -844,7 +844,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
AllContactsCallback(MotionStateType desiredObjectType, const ShapeInfo& shapeInfo, const Transform& transform) : AllContactsCallback(MotionStateType desiredObjectType, const ShapeInfo& shapeInfo, const Transform& transform) :
desiredObjectType(desiredObjectType), desiredObjectType(desiredObjectType),
collisionObject(), collisionObject(),
intersectingObjects(), contacts(),
btCollisionWorld::ContactResultCallback() { btCollisionWorld::ContactResultCallback() {
const btCollisionShape* collisionShape = ObjectMotionState::getShapeManager()->getShape(shapeInfo); const btCollisionShape* collisionShape = ObjectMotionState::getShapeManager()->getShape(shapeInfo);
@ -863,7 +863,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
MotionStateType desiredObjectType; MotionStateType desiredObjectType;
btCollisionObject collisionObject; btCollisionObject collisionObject;
std::vector<EntityIntersection> intersectingObjects; std::vector<ContactTestResult> contacts;
bool needsCollision(btBroadphaseProxy* proxy) const override { bool needsCollision(btBroadphaseProxy* proxy) const override {
return true; return true;
@ -896,7 +896,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
} }
// This is the correct object type. Add it to the list. // This is the correct object type. Add it to the list.
intersectingObjects.emplace_back(candidate->getObjectID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint)); contacts.emplace_back(candidate->getObjectID(), bulletToGLM(penetrationPoint), bulletToGLM(otherPenetrationPoint));
return 0; return 0;
} }
@ -907,10 +907,10 @@ protected:
} }
}; };
std::vector<EntityIntersection> PhysicsEngine::getCollidingInRegion(MotionStateType desiredObjectType, const ShapeInfo& regionShapeInfo, const Transform& regionTransform) const { const std::vector<ContactTestResult> PhysicsEngine::getCollidingInRegion(MotionStateType desiredObjectType, const ShapeInfo& regionShapeInfo, const Transform& regionTransform) const {
auto contactCallback = AllContactsCallback(desiredObjectType, regionShapeInfo, regionTransform); auto contactCallback = AllContactsCallback(desiredObjectType, regionShapeInfo, regionTransform);
_dynamicsWorld->contactTest(&contactCallback.collisionObject, contactCallback); _dynamicsWorld->contactTest(&contactCallback.collisionObject, contactCallback);
return contactCallback.intersectingObjects; return contactCallback.contacts;
} }

View file

@ -43,22 +43,22 @@ public:
void* _b; // ObjectMotionState pointer void* _b; // ObjectMotionState pointer
}; };
struct EntityIntersection { struct ContactTestResult {
EntityIntersection() { } ContactTestResult() = delete;
EntityIntersection(const EntityIntersection& entityIntersection) : ContactTestResult(const ContactTestResult& contactTestResult) :
id(entityIntersection.id), foundID(contactTestResult.foundID),
testCollisionPoint(entityIntersection.testCollisionPoint), testCollisionPoint(contactTestResult.testCollisionPoint),
foundCollisionPoint(entityIntersection.foundCollisionPoint) { foundCollisionPoint(contactTestResult.foundCollisionPoint) {
} }
EntityIntersection(QUuid id, glm::vec3 testCollisionPoint, glm::vec3 otherCollisionPoint) : ContactTestResult(QUuid foundID, glm::vec3 testCollisionPoint, glm::vec3 otherCollisionPoint) :
id(id), foundID(foundID),
testCollisionPoint(testCollisionPoint), testCollisionPoint(testCollisionPoint),
foundCollisionPoint(otherCollisionPoint) { foundCollisionPoint(otherCollisionPoint) {
} }
QUuid id; QUuid foundID;
// The deepest point of an intersection within the volume of the test shape, in world space. // The deepest point of an intersection within the volume of the test shape, in world space.
glm::vec3 testCollisionPoint; glm::vec3 testCollisionPoint;
// The deepest point of an intersection within the volume of the found object, in world space. // The deepest point of an intersection within the volume of the found object, in world space.
@ -128,7 +128,7 @@ public:
void setShowBulletConstraintLimits(bool value); void setShowBulletConstraintLimits(bool value);
// Function for getting colliding ObjectMotionStates in the world of specified type // Function for getting colliding ObjectMotionStates in the world of specified type
std::vector<EntityIntersection> getCollidingInRegion(MotionStateType desiredObjectType, const ShapeInfo& regionShapeInfo, const Transform& regionTransform) const; const std::vector<ContactTestResult> getCollidingInRegion(MotionStateType desiredObjectType, const ShapeInfo& regionShapeInfo, const Transform& regionTransform) const;
private: private:
QList<EntityDynamicPointer> removeDynamicsForBody(btRigidBody* body); QList<EntityDynamicPointer> removeDynamicsForBody(btRigidBody* body);