From 3e11c6439fcbce6ae590b48f25c5276315c81f02 Mon Sep 17 00:00:00 2001 From: Joe Ardent <code@ardent.nebcorp.com> Date: Sat, 29 Mar 2025 16:08:27 -0700 Subject: [PATCH] inline suspension force calc --- src/physics.rs | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/src/physics.rs b/src/physics.rs index aa48da5..a32d6ba 100644 --- a/src/physics.rs +++ b/src/physics.rs @@ -213,9 +213,17 @@ mod systems { CyberWheel::Rear => (rear_caster, rear_hits), }; - let prev = &mut state.displacement; if let Some(hit) = hits.iter().next() { - let mag = suspension_force(caster, hit, config, prev, dt, &mut xform); + let dist = hit.distance; + let cdir = caster.direction.as_vec3(); + xform.translation = config.attach + (cdir * dist); + + let displacement = config.rest_dist - dist; + let damper_vel = (state.displacement - displacement) / dt; + state.displacement = displacement; + + let mag = config.konstant * displacement - config.damping * damper_vel; + let mag = mag.max(0.0); //let fdir = -caster.global_direction().as_vec3(); let fdir = hit.normal1; @@ -252,25 +260,6 @@ mod systems { } } - fn suspension_force( - caster: &ShapeCaster, - hit: &ShapeHitData, - config: &WheelConfig, - previous_dispacement: &mut Scalar, - dt: Scalar, - wheel_xform: &mut Transform, - ) -> Scalar { - let dist = hit.distance; - let cdir = caster.direction.as_vec3(); - wheel_xform.translation = config.attach + (cdir * dist); - - let displacement = config.rest_dist - dist; - let damper_vel = (*previous_dispacement - displacement) / dt; - - *previous_dispacement = displacement; - config.konstant * displacement - config.damping * damper_vel - } - pub(super) fn tweak( mut config: Query<&mut WheelConfig>, mut keys: ResMut<ButtonInput<KeyCode>>,