inline suspension force calc

This commit is contained in:
Joe Ardent 2025-03-29 16:08:27 -07:00
parent 7d28281781
commit 3e11c6439f

View file

@ -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>>,