mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 01:24:36 +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
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue