mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 16:55:07 +02:00
Pass collision filter flags into AllContactsCallback for more efficient collision filtering
This commit is contained in:
parent
d1a80e57be
commit
83ededfd37
1 changed files with 11 additions and 4 deletions
|
@ -863,6 +863,9 @@ void PhysicsEngine::setShowBulletConstraintLimits(bool value) {
|
|||
}
|
||||
}
|
||||
|
||||
const int32_t CONTACT_CALLBACK_FLAG_ENTITY = BULLET_COLLISION_GROUP_STATIC | BULLET_COLLISION_GROUP_KINEMATIC | BULLET_COLLISION_GROUP_DYNAMIC;
|
||||
const int32_t CONTACT_CALLBACK_FLAG_AVATAR = USER_COLLISION_GROUP_MY_AVATAR | USER_COLLISION_GROUP_OTHER_AVATAR;
|
||||
|
||||
struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
|
||||
AllContactsCallback(MotionStateType desiredObjectType, const ShapeInfo& shapeInfo, const Transform& transform, btCollisionObject* myAvatarCollisionObject) :
|
||||
btCollisionWorld::ContactResultCallback(),
|
||||
|
@ -879,6 +882,14 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
|
|||
bulletTransform.setRotation(glmToBullet(transform.getRotation()));
|
||||
|
||||
collisionObject.setWorldTransform(bulletTransform);
|
||||
|
||||
m_collisionFilterGroup = ~0; // Everything collidable should collide with our test object unless we set the filter mask otherwise
|
||||
if (desiredObjectType == MOTIONSTATE_TYPE_AVATAR) {
|
||||
m_collisionFilterMask = CONTACT_CALLBACK_FLAG_AVATAR;
|
||||
}
|
||||
else {
|
||||
m_collisionFilterMask = CONTACT_CALLBACK_FLAG_ENTITY;
|
||||
}
|
||||
}
|
||||
|
||||
~AllContactsCallback() {
|
||||
|
@ -890,10 +901,6 @@ struct AllContactsCallback : public btCollisionWorld::ContactResultCallback {
|
|||
std::vector<ContactTestResult> contacts;
|
||||
btCollisionObject* myAvatarCollisionObject;
|
||||
|
||||
bool needsCollision(btBroadphaseProxy* proxy) const override {
|
||||
return true;
|
||||
}
|
||||
|
||||
btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1) override {
|
||||
const btCollisionObject* otherBody;
|
||||
btVector3 penetrationPoint;
|
||||
|
|
Loading…
Reference in a new issue