inline suspension force calc
This commit is contained in:
parent
7d28281781
commit
3e11c6439f
1 changed files with 10 additions and 21 deletions
|
@ -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>>,
|
||||
|
|
Loading…
Reference in a new issue