@@ -735,6 +735,12 @@ pub fn init_colliders(
735735 let context = & mut * context;
736736 let physics_scale = context. physics_scale ;
737737
738+ let colliders = colliders. iter ( ) ;
739+ #[ cfg( feature = "enhanced-determinism" ) ]
740+ let mut colliders: Vec < ColliderComponents > = colliders. collect ( ) ;
741+ #[ cfg( feature = "enhanced-determinism" ) ]
742+ colliders. sort_unstable_by_key ( |f| f. 0 ) ;
743+
738744 for (
739745 entity,
740746 shape,
@@ -748,7 +754,7 @@ pub fn init_colliders(
748754 collision_groups,
749755 solver_groups,
750756 contact_force_event_threshold,
751- ) in colliders. iter ( )
757+ ) in colliders
752758 {
753759 let mut scaled_shape = shape. clone ( ) ;
754760 scaled_shape. set_scale ( shape. scale / physics_scale, config. scaled_shape_subdivision ) ;
@@ -852,6 +858,12 @@ pub fn init_rigid_bodies(
852858) {
853859 let physics_scale = context. physics_scale ;
854860
861+ let rigid_bodies = rigid_bodies. iter ( ) ;
862+ #[ cfg( feature = "enhanced-determinism" ) ]
863+ let mut rigid_bodies: Vec < RigidBodyComponents > = rigid_bodies. collect ( ) ;
864+ #[ cfg( feature = "enhanced-determinism" ) ]
865+ rigid_bodies. sort_unstable_by_key ( |f| f. 0 ) ;
866+
855867 for (
856868 entity,
857869 rb,
@@ -866,7 +878,7 @@ pub fn init_rigid_bodies(
866878 dominance,
867879 sleep,
868880 damping,
869- ) in rigid_bodies. iter ( )
881+ ) in rigid_bodies
870882 {
871883 let mut builder = RigidBodyBuilder :: new ( ( * rb) . into ( ) ) ;
872884 if let Some ( transform) = transform {
@@ -995,7 +1007,13 @@ pub fn init_joints(
9951007 let context = & mut * context;
9961008 let scale = context. physics_scale ;
9971009
998- for ( entity, joint) in impulse_joints. iter ( ) {
1010+ let impulse_joints = impulse_joints. iter ( ) ;
1011+ #[ cfg( feature = "enhanced-determinism" ) ]
1012+ let mut impulse_joints: Vec < ( Entity , & ImpulseJoint ) > = impulse_joints. collect ( ) ;
1013+ #[ cfg( feature = "enhanced-determinism" ) ]
1014+ impulse_joints. sort_unstable_by_key ( |f| f. 0 ) ;
1015+
1016+ for ( entity, joint) in impulse_joints {
9991017 let mut target = None ;
10001018 let mut body_entity = entity;
10011019 while target. is_none ( ) {
@@ -1019,7 +1037,13 @@ pub fn init_joints(
10191037 }
10201038 }
10211039
1022- for ( entity, joint) in multibody_joints. iter ( ) {
1040+ let multibody_joints = multibody_joints. iter ( ) ;
1041+ #[ cfg( feature = "enhanced-determinism" ) ]
1042+ let mut multibody_joints: Vec < ( Entity , & MultibodyJoint ) > = multibody_joints. collect ( ) ;
1043+ #[ cfg( feature = "enhanced-determinism" ) ]
1044+ multibody_joints. sort_unstable_by_key ( |f| f. 0 ) ;
1045+
1046+ for ( entity, joint) in multibody_joints {
10231047 let target = context. entity2body . get ( & entity) ;
10241048
10251049 if let ( Some ( target) , Some ( source) ) = ( target, context. entity2body . get ( & joint. parent ) ) {
@@ -1097,7 +1121,13 @@ pub fn sync_removals(
10971121 /*
10981122 * Collider removal detection.
10991123 */
1100- for entity in removed_colliders. iter ( ) {
1124+ let removed_colliders = removed_colliders. iter ( ) ;
1125+ #[ cfg( feature = "enhanced-determinism" ) ]
1126+ let mut removed_colliders: Vec < Entity > = removed_colliders. collect ( ) ;
1127+ #[ cfg( feature = "enhanced-determinism" ) ]
1128+ removed_colliders. sort_unstable ( ) ;
1129+
1130+ for entity in removed_colliders {
11011131 if let Some ( handle) = context. entity2collider . remove ( & entity) {
11021132 context
11031133 . colliders
@@ -1106,7 +1136,13 @@ pub fn sync_removals(
11061136 }
11071137 }
11081138
1109- for entity in orphan_colliders. iter ( ) {
1139+ let orphan_colliders = orphan_colliders. iter ( ) ;
1140+ #[ cfg( feature = "enhanced-determinism" ) ]
1141+ let mut orphan_colliders: Vec < Entity > = orphan_colliders. collect ( ) ;
1142+ #[ cfg( feature = "enhanced-determinism" ) ]
1143+ orphan_colliders. sort_unstable ( ) ;
1144+
1145+ for entity in orphan_colliders {
11101146 if let Some ( handle) = context. entity2collider . remove ( & entity) {
11111147 context
11121148 . colliders
0 commit comments