From 64d440871478c1e943e41ee0f79d37daf0174b16 Mon Sep 17 00:00:00 2001 From: Joona Aalto Date: Sat, 13 Jul 2024 19:48:25 +0300 Subject: [PATCH] Fix contact constraints being cleared many times with many backends --- src/collision/narrow_phase.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/collision/narrow_phase.rs b/src/collision/narrow_phase.rs index 4d5200c0..f3117071 100644 --- a/src/collision/narrow_phase.rs +++ b/src/collision/narrow_phase.rs @@ -135,6 +135,18 @@ impl Plugin for NarrowPhasePlugin { ); if self.generate_constraints { + if is_first_instance { + // Clear contact constraints. + app.add_systems( + self.schedule, + (|mut constraints: ResMut| { + constraints.clear(); + }) + .after(NarrowPhaseSet::PostProcess) + .before(NarrowPhaseSet::GenerateConstraints), + ); + } + // Generate contact constraints. app.add_systems( self.schedule, @@ -262,9 +274,6 @@ fn generate_constraints( ) { let delta_secs = time.delta_seconds_adjusted(); - // Clear contact constraints. - constraints.clear(); - // TODO: Parallelize. for contacts in narrow_phase.collisions.get_internal().values() { let Ok([collider1, collider2]) = narrow_phase