@@ -127,11 +127,15 @@ impl PhysicsWorld {
127127 impulse_joint_set : ImpulseJointSet :: new ( ) ,
128128 multibody_joint_set : MultibodyJointSet :: new ( ) ,
129129 ccd_solver : CCDSolver :: new ( ) ,
130- // Earth gravity scaled for 60x time scale (1 real second = 60 game seconds)
131- // Base gravity: 9.81 m/s² = 981 cm/s²
132- // Scaled by 60² = 3600 (since acceleration = distance/time²)
133- gravity : vector ! [ 0.0 , -981.0 * 3600.0 , 0.0 ] , // 3,531,600 cm/s² in game time
134- integration_parameters : IntegrationParameters :: default ( ) ,
130+ // Earth gravity: 9.81 m/s² = 981 cm/s²
131+ // Physics steps represent game time (1 step = 1 game second), so use normal gravity
132+ gravity : vector ! [ 0.0 , -981.0 , 0.0 ] , // 981 cm/s²
133+ integration_parameters : IntegrationParameters {
134+ // Each physics step represents 1 game second (60x time scale)
135+ // Real-time step is 1/60 second, but we simulate 1 game second per step
136+ dt : 1.0 , // 1 game second per step
137+ ..IntegrationParameters :: default ( )
138+ } ,
135139 entity_handles : HashMap :: new ( ) ,
136140 }
137141 }
@@ -152,10 +156,10 @@ impl PhysicsWorld {
152156 use rand:: Rng ;
153157
154158 // Random initial velocity for trajectory variation
155- // Scaled by 60 for 60x time scale (1 real second = 60 game seconds )
159+ // Velocities are in game- time units (cm/ game-second )
156160 let mut rng = rand:: thread_rng ( ) ;
157- let vel_x = rng. gen_range ( -100.0 ..100.0 ) * 60.0 ;
158- let vel_z = rng. gen_range ( -100.0 ..100.0 ) * 60.0 ;
161+ let vel_x = rng. gen_range ( -100.0 ..100.0 ) ;
162+ let vel_z = rng. gen_range ( -100.0 ..100.0 ) ;
159163 let vel_y = 0.0 ; // Zero vertical velocity
160164
161165 let rigid_body = RigidBodyBuilder :: dynamic ( )
@@ -248,11 +252,11 @@ impl PhysicsWorld {
248252 if let Some ( body) = self . rigid_body_set . get_mut ( * handle) {
249253 let mut linvel = * body. linvel ( ) ;
250254 // Random perturbation to velocity for trajectory variation
251- // Scaled by 60 for 60x time scale
255+ // Velocities are in game- time units (cm/game-second)
252256 if linvel. y < 6.0 && linvel. y > -6.0 {
253257 // Near ground, add random horizontal component to maintain speed
254- linvel. x += rng. gen_range ( -20.0 ..20.0 ) * 60.0 ;
255- linvel. z += rng. gen_range ( -20.0 ..20.0 ) * 60.0 ;
258+ linvel. x += rng. gen_range ( -20.0 ..20.0 ) ;
259+ linvel. z += rng. gen_range ( -20.0 ..20.0 ) ;
256260 body. set_linvel ( linvel, true ) ;
257261 }
258262 }
0 commit comments