Skip to content

Commit

Permalink
Merge pull request godotengine#100533 from mihe/jolt/sleeping-contacts
Browse files Browse the repository at this point in the history
Stop reporting contacts for sleeping bodies when using Jolt Physics
  • Loading branch information
akien-mga committed Dec 17, 2024
2 parents 4e46e8b + 5bbdb4a commit 6e2cf2a
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 @@ -407,24 +407,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 6e2cf2a

Please sign in to comment.