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

View file

@ -18,22 +18,22 @@ public:
CollisionPickResult() {}
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()),
intersects(intersectingEntities.size() || intersectingAvatars.size()),
intersectingEntities(intersectingEntities),
intersectingAvatars(intersectingAvatars) {
intersects(entityIntersections.size() || avatarIntersections.size()),
entityIntersections(entityIntersections),
avatarIntersections(avatarIntersections) {
}
CollisionPickResult(const CollisionPickResult& collisionPickResult) : PickResult(collisionPickResult.pickVariant) {
intersectingAvatars = collisionPickResult.intersectingAvatars;
intersectingEntities = collisionPickResult.intersectingEntities;
intersects = intersectingAvatars.size() || intersectingEntities.size();
avatarIntersections = collisionPickResult.avatarIntersections;
entityIntersections = collisionPickResult.entityIntersections;
intersects = avatarIntersections.size() || entityIntersections.size();
}
bool intersects { false };
std::vector<EntityIntersection> intersectingEntities;
std::vector<EntityIntersection> intersectingAvatars;
std::vector<ContactTestResult> entityIntersections;
std::vector<ContactTestResult> avatarIntersections;
virtual QVariantMap toVariantMap() const override {
QVariantMap variantMap;
@ -41,21 +41,21 @@ public:
variantMap["intersects"] = intersects;
QVariantList qEntityIntersections;
for (auto intersectingEntity : intersectingEntities) {
for (auto entityIntersection : entityIntersections) {
QVariantMap qEntityIntersection;
qEntityIntersection["objectID"] = intersectingEntity.id;
qEntityIntersection["pickCollisionPoint"] = vec3toVariant(intersectingEntity.testCollisionPoint);
qEntityIntersection["entityCollisionPoint"] = vec3toVariant(intersectingEntity.foundCollisionPoint);
qEntityIntersection["objectID"] = entityIntersection.foundID;
qEntityIntersection["pickCollisionPoint"] = vec3toVariant(entityIntersection.testCollisionPoint);
qEntityIntersection["entityCollisionPoint"] = vec3toVariant(entityIntersection.foundCollisionPoint);
qEntityIntersections.append(qEntityIntersection);
}
variantMap["entityIntersections"] = qEntityIntersections;
QVariantList qAvatarIntersections;
for (auto intersectingAvatar : intersectingAvatars) {
for (auto avatarIntersection : avatarIntersections) {
QVariantMap qAvatarIntersection;
qAvatarIntersection["objectID"] = intersectingAvatar.id;
qAvatarIntersection["pickCollisionPoint"] = vec3toVariant(intersectingAvatar.testCollisionPoint);
qAvatarIntersection["entityCollisionPoint"] = vec3toVariant(intersectingAvatar.foundCollisionPoint);
qAvatarIntersection["objectID"] = avatarIntersection.foundID;
qAvatarIntersection["pickCollisionPoint"] = vec3toVariant(avatarIntersection.testCollisionPoint);
qAvatarIntersection["entityCollisionPoint"] = vec3toVariant(avatarIntersection.foundCollisionPoint);
qAvatarIntersections.append(qAvatarIntersection);
}
variantMap["avatarIntersections"] = qAvatarIntersections;
@ -71,14 +71,14 @@ public:
PickResultPointer compareAndProcessNewResult(const PickResultPointer& newRes) override {
const std::shared_ptr<CollisionPickResult> newCollisionResult = std::static_pointer_cast<CollisionPickResult>(newRes);
for (EntityIntersection& intersectingEntity : newCollisionResult->intersectingEntities) {
intersectingEntities.push_back(intersectingEntity);
for (ContactTestResult& entityIntersection : newCollisionResult->entityIntersections) {
entityIntersections.push_back(entityIntersection);
}
for (EntityIntersection& intersectingAvatar : newCollisionResult->intersectingAvatars) {
intersectingAvatars.push_back(intersectingAvatar);
for (ContactTestResult& avatarIntersection : newCollisionResult->avatarIntersections) {
avatarIntersections.push_back(avatarIntersection);
}
intersects = intersectingEntities.size() || intersectingAvatars.size();
intersects = entityIntersections.size() || avatarIntersections.size();
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) :
desiredObjectType(desiredObjectType),
collisionObject(),
intersectingObjects(),
contacts(),
btCollisionWorld::ContactResultCallback() {
const btCollisionShape* collisionShape = ObjectMotionState::getShapeManager()->getShape(shapeInfo);
@ -863,7 +863,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
MotionStateType desiredObjectType;
btCollisionObject collisionObject;
std::vector<EntityIntersection> intersectingObjects;
std::vector<ContactTestResult> contacts;
bool needsCollision(btBroadphaseProxy* proxy) const override {
return true;
@ -896,7 +896,7 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
}
// 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;
}
@ -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);
_dynamicsWorld->contactTest(&contactCallback.collisionObject, contactCallback);
return contactCallback.intersectingObjects;
return contactCallback.contacts;
}

View file

@ -43,22 +43,22 @@ public:
void* _b; // ObjectMotionState pointer
};
struct EntityIntersection {
EntityIntersection() { }
struct ContactTestResult {
ContactTestResult() = delete;
EntityIntersection(const EntityIntersection& entityIntersection) :
id(entityIntersection.id),
testCollisionPoint(entityIntersection.testCollisionPoint),
foundCollisionPoint(entityIntersection.foundCollisionPoint) {
ContactTestResult(const ContactTestResult& contactTestResult) :
foundID(contactTestResult.foundID),
testCollisionPoint(contactTestResult.testCollisionPoint),
foundCollisionPoint(contactTestResult.foundCollisionPoint) {
}
EntityIntersection(QUuid id, glm::vec3 testCollisionPoint, glm::vec3 otherCollisionPoint) :
id(id),
ContactTestResult(QUuid foundID, glm::vec3 testCollisionPoint, glm::vec3 otherCollisionPoint) :
foundID(foundID),
testCollisionPoint(testCollisionPoint),
foundCollisionPoint(otherCollisionPoint) {
}
QUuid id;
QUuid foundID;
// The deepest point of an intersection within the volume of the test shape, in world space.
glm::vec3 testCollisionPoint;
// 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);
// 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:
QList<EntityDynamicPointer> removeDynamicsForBody(btRigidBody* body);