Skip to content

Commit

Permalink
Stop reporting contacts for sleeping bodies when using Jolt Physics
Browse files Browse the repository at this point in the history
(cherry picked from commit 5bbdb4a)
  • Loading branch information
mihe authored and Spartan322 committed Dec 29, 2024
1 parent e409047 commit 7a414df
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions modules/jolt_physics/spaces/jolt_contact_listener_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -409,24 +409,28 @@ void JoltContactListener3D::_flush_contacts() {
const JPH::SubShapeIDPair &shape_pair = E.key;
Manifold &manifold = E.value;

const JPH::BodyID body_ids[2] = { shape_pair.GetBody1ID(), shape_pair.GetBody2ID() };
const JoltReadableBodies3D jolt_bodies = space->read_bodies(body_ids, 2);
const JoltReadableBody3D jolt_body1 = space->read_body(shape_pair.GetBody1ID());
const JoltReadableBody3D jolt_body2 = space->read_body(shape_pair.GetBody2ID());

JoltBody3D *body1 = jolt_bodies[0].as_body();
JoltBody3D *body1 = jolt_body1.as_body();
ERR_FAIL_NULL(body1);

JoltBody3D *body2 = jolt_bodies[1].as_body();
JoltBody3D *body2 = jolt_body2.as_body();
ERR_FAIL_NULL(body2);

const int shape_index1 = body1->find_shape_index(shape_pair.GetSubShapeID1());
const int shape_index2 = body2->find_shape_index(shape_pair.GetSubShapeID2());

for (const Contact &contact : manifold.contacts1) {
body1->add_contact(body2, manifold.depth, shape_index1, shape_index2, contact.normal, contact.point_self, contact.point_other, contact.velocity_self, contact.velocity_other, contact.impulse);
if (jolt_body1->IsActive()) {
for (const Contact &contact : manifold.contacts1) {
body1->add_contact(body2, manifold.depth, shape_index1, shape_index2, contact.normal, contact.point_self, contact.point_other, contact.velocity_self, contact.velocity_other, contact.impulse);
}
}

for (const Contact &contact : manifold.contacts2) {
body2->add_contact(body1, manifold.depth, shape_index2, shape_index1, contact.normal, contact.point_self, contact.point_other, contact.velocity_self, contact.velocity_other, contact.impulse);
if (jolt_body2->IsActive()) {
for (const Contact &contact : manifold.contacts2) {
body2->add_contact(body1, manifold.depth, shape_index2, shape_index1, contact.normal, contact.point_self, contact.point_other, contact.velocity_self, contact.velocity_other, contact.impulse);
}
}

manifold.contacts1.clear();
Expand Down

0 comments on commit 7a414df

Please sign in to comment.