dimforge / rapier

2D and 3D physics engines focused on performance.
https://rapier.rs
Apache License 2.0
3.77k stars 235 forks source link

fix(user_changes): Fix RigidBodyType changed to Dynamic not added to active dynamic set #599

Closed MaxCWhitehead closed 3 months ago

MaxCWhitehead commented 3 months ago

I ran into what I believe is a bug in which if a rigid body is changed to dynamic from kinematic, it may never end up in active dynamic set. This caused some issues including gravity not being integrated.

I believe in user changes we should add body to dynamic active if its type changed to dynamic. (And is enabled / not sleeping, the existing conditions).

I added a test to reproduce the issue. The failure seems to only occur if pipeline is stepped (at least) once after creating kinematic body, before switching to dynamic. Without the change to user_changes.rs, both conditions will fail in test.

Please let me know if I am somehow using API wrong and this is not a bug.

sebcrozet commented 3 months ago

That makes sense. Thank you for the fix!