@@ -719,6 +719,12 @@ pub fn init_colliders(
719719 let context = & mut * context;
720720 let physics_scale = context. physics_scale ;
721721
722+ #[ cfg( feature = "enhanced-determinism" ) ]
723+ {
724+ let mut colliders: Vec < ColliderComponents > = colliders. iter ( ) . collect ( ) ;
725+ colliders. sort_by_key ( |f| f. 0 ) ;
726+ }
727+
722728 for (
723729 entity,
724730 shape,
@@ -836,6 +842,12 @@ pub fn init_rigid_bodies(
836842) {
837843 let physics_scale = context. physics_scale ;
838844
845+ #[ cfg( feature = "enhanced-determinism" ) ]
846+ {
847+ let mut rigid_bodies: Vec < RigidBodyComponents > = rigid_bodies. iter ( ) . collect ( ) ;
848+ rigid_bodies. sort_by_key ( |f| f. 0 ) ;
849+ }
850+
839851 for (
840852 entity,
841853 rb,
@@ -979,6 +991,12 @@ pub fn init_joints(
979991 let context = & mut * context;
980992 let scale = context. physics_scale ;
981993
994+ #[ cfg( feature = "enhanced-determinism" ) ]
995+ {
996+ let mut impulse_joints: Vec < ( Entity , & ImpulseJoint ) > = impulse_joints. iter ( ) . collect ( ) ;
997+ impulse_joints. sort_by_key ( |f| f. 0 ) ;
998+ }
999+
9821000 for ( entity, joint) in impulse_joints. iter ( ) {
9831001 let mut target = None ;
9841002 let mut body_entity = entity;
@@ -1003,6 +1021,13 @@ pub fn init_joints(
10031021 }
10041022 }
10051023
1024+ #[ cfg( feature = "enhanced-determinism" ) ]
1025+ {
1026+ let mut multibody_joints: Vec < ( Entity , & MultibodyJoint ) > =
1027+ multibody_joints. iter ( ) . collect ( ) ;
1028+ multibody_joints. sort_by_key ( |f| f. 0 ) ;
1029+ }
1030+
10061031 for ( entity, joint) in multibody_joints. iter ( ) {
10071032 let target = context. entity2body . get ( & entity) ;
10081033
@@ -1081,6 +1106,12 @@ pub fn sync_removals(
10811106 /*
10821107 * Collider removal detection.
10831108 */
1109+ #[ cfg( feature = "enhanced-determinism" ) ]
1110+ {
1111+ let mut removed_colliders: Vec < Entity > = removed_colliders. iter ( ) . collect ( ) ;
1112+ removed_colliders. sort ( ) ;
1113+ }
1114+
10841115 for entity in removed_colliders. iter ( ) {
10851116 if let Some ( handle) = context. entity2collider . remove ( & entity) {
10861117 context
@@ -1090,6 +1121,12 @@ pub fn sync_removals(
10901121 }
10911122 }
10921123
1124+ #[ cfg( feature = "enhanced-determinism" ) ]
1125+ {
1126+ let mut orphan_colliders: Vec < Entity > = orphan_colliders. iter ( ) . collect ( ) ;
1127+ orphan_colliders. sort ( ) ;
1128+ }
1129+
10931130 for entity in orphan_colliders. iter ( ) {
10941131 if let Some ( handle) = context. entity2collider . remove ( & entity) {
10951132 context
0 commit comments