@@ -759,6 +759,12 @@ pub fn init_colliders(
759759 let context = & mut * context;
760760 let physics_scale = context. physics_scale ;
761761
762+ let colliders = colliders. iter ( ) ;
763+ #[ cfg( feature = "enhanced-determinism" ) ]
764+ let mut colliders: Vec < ( ColliderComponents , Option < & GlobalTransform > ) > = colliders. collect ( ) ;
765+ #[ cfg( feature = "enhanced-determinism" ) ]
766+ colliders. sort_unstable_by_key ( |f| f. 0 . 0 ) ;
767+
762768 for (
763769 (
764770 entity,
@@ -776,7 +782,7 @@ pub fn init_colliders(
776782 disabled,
777783 ) ,
778784 global_transform,
779- ) in colliders. iter ( )
785+ ) in colliders
780786 {
781787 let mut scaled_shape = shape. clone ( ) ;
782788 scaled_shape. set_scale ( shape. scale / physics_scale, config. scaled_shape_subdivision ) ;
@@ -888,6 +894,12 @@ pub fn init_rigid_bodies(
888894) {
889895 let physics_scale = context. physics_scale ;
890896
897+ let rigid_bodies = rigid_bodies. iter ( ) ;
898+ #[ cfg( feature = "enhanced-determinism" ) ]
899+ let mut rigid_bodies: Vec < RigidBodyComponents > = rigid_bodies. collect ( ) ;
900+ #[ cfg( feature = "enhanced-determinism" ) ]
901+ rigid_bodies. sort_unstable_by_key ( |f| f. 0 ) ;
902+
891903 for (
892904 entity,
893905 rb,
@@ -903,7 +915,7 @@ pub fn init_rigid_bodies(
903915 sleep,
904916 damping,
905917 disabled,
906- ) in rigid_bodies. iter ( )
918+ ) in rigid_bodies
907919 {
908920 let mut builder = RigidBodyBuilder :: new ( ( * rb) . into ( ) ) ;
909921 builder = builder. enabled ( disabled. is_none ( ) ) ;
@@ -1034,7 +1046,13 @@ pub fn init_joints(
10341046 let context = & mut * context;
10351047 let scale = context. physics_scale ;
10361048
1037- for ( entity, joint) in impulse_joints. iter ( ) {
1049+ let impulse_joints = impulse_joints. iter ( ) ;
1050+ #[ cfg( feature = "enhanced-determinism" ) ]
1051+ let mut impulse_joints: Vec < ( Entity , & ImpulseJoint ) > = impulse_joints. collect ( ) ;
1052+ #[ cfg( feature = "enhanced-determinism" ) ]
1053+ impulse_joints. sort_unstable_by_key ( |f| f. 0 ) ;
1054+
1055+ for ( entity, joint) in impulse_joints {
10381056 let mut target = None ;
10391057 let mut body_entity = entity;
10401058 while target. is_none ( ) {
@@ -1058,7 +1076,13 @@ pub fn init_joints(
10581076 }
10591077 }
10601078
1061- for ( entity, joint) in multibody_joints. iter ( ) {
1079+ let multibody_joints = multibody_joints. iter ( ) ;
1080+ #[ cfg( feature = "enhanced-determinism" ) ]
1081+ let mut multibody_joints: Vec < ( Entity , & MultibodyJoint ) > = multibody_joints. collect ( ) ;
1082+ #[ cfg( feature = "enhanced-determinism" ) ]
1083+ multibody_joints. sort_unstable_by_key ( |f| f. 0 ) ;
1084+
1085+ for ( entity, joint) in multibody_joints {
10621086 let target = context. entity2body . get ( & entity) ;
10631087
10641088 if let ( Some ( target) , Some ( source) ) = ( target, context. entity2body . get ( & joint. parent ) ) {
@@ -1138,7 +1162,13 @@ pub fn sync_removals(
11381162 /*
11391163 * Collider removal detection.
11401164 */
1141- for entity in removed_colliders. iter ( ) {
1165+ let removed_colliders = removed_colliders. iter ( ) ;
1166+ #[ cfg( feature = "enhanced-determinism" ) ]
1167+ let mut removed_colliders: Vec < Entity > = removed_colliders. collect ( ) ;
1168+ #[ cfg( feature = "enhanced-determinism" ) ]
1169+ removed_colliders. sort_unstable ( ) ;
1170+
1171+ for entity in removed_colliders {
11421172 if let Some ( handle) = context. entity2collider . remove ( & entity) {
11431173 context
11441174 . colliders
@@ -1147,7 +1177,13 @@ pub fn sync_removals(
11471177 }
11481178 }
11491179
1150- for entity in orphan_colliders. iter ( ) {
1180+ let orphan_colliders = orphan_colliders. iter ( ) ;
1181+ #[ cfg( feature = "enhanced-determinism" ) ]
1182+ let mut orphan_colliders: Vec < Entity > = orphan_colliders. collect ( ) ;
1183+ #[ cfg( feature = "enhanced-determinism" ) ]
1184+ orphan_colliders. sort_unstable ( ) ;
1185+
1186+ for entity in orphan_colliders {
11511187 if let Some ( handle) = context. entity2collider . remove ( & entity) {
11521188 context
11531189 . colliders
0 commit comments