mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 09:53:24 +02:00
Re-name EntityIntersection to ContactTestResult and remove its default constructor, plus update related variables
This commit is contained in:
parent
fadc094a01
commit
de7d974336
4 changed files with 41 additions and 41 deletions
interface/src/raypick
libraries/physics/src
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue