diff --git a/src/hud.rs b/src/hud.rs index 51fda48..3ae5c3d 100644 --- a/src/hud.rs +++ b/src/hud.rs @@ -401,7 +401,7 @@ fn update_hud( mut query_chat: Query<&mut Text, (With, Without)>, query_all_actors: Query<&actor::Actor>, settings: Res, - q_target: Query<(Option<&Position>, &IsClickable), With>, + q_target: Query<(&IsClickable, Option<&Position>, Option<&LinearVelocity>), With>, ) { // TODO only when hud is actually on if timer.0.tick(time.delta()).just_finished() || log.needs_rerendering { @@ -438,19 +438,16 @@ fn update_hud( text.sections[9].value = format!("{all_actors:.0}"); let integrity = suit.integrity * 100.0; text.sections[11].value = format!("{integrity:.0}%"); - let speed = cam_v.length(); - let speed_readable = nature::readable_distance(speed); - let gforce = gforce.gforce; //text.sections[17].value = format!("{speed_readable}/s / {kmh:.0}km/h / {gforce:.1}g"); // Target display let dist_scalar: f64; - if let Ok((_, IsClickable { distance: Some(dist), .. })) = q_target.get_single() { + if let Ok((IsClickable { distance: Some(dist), .. }, _, _)) = q_target.get_single() { dist_scalar = *dist; } else { let target: Option; - if let Ok((Some(targetpos), _)) = q_target.get_single() { + if let Ok((_, Some(targetpos), _)) = q_target.get_single() { target = Some(targetpos.0); } else if q_target.is_empty() { @@ -468,7 +465,8 @@ fn update_hud( } } - if let Ok((_, clickable)) = q_target.get_single() { + let gforce = gforce.gforce; + if let Ok((clickable, _, target_v_maybe)) = q_target.get_single() { let distance = if dist_scalar.is_nan() { "UNKNOWN".to_string() } else if dist_scalar != 0.0 { @@ -476,10 +474,18 @@ fn update_hud( } else { "ERROR".to_string() }; + let speed: f64 = if let Some(target_v) = target_v_maybe { + (target_v.0 - cam_v.0).length() + } else { + cam_v.length() + }; + let speed_readable = nature::readable_distance(speed); let target_name = clickable.name.clone().unwrap_or("Unnamed".to_string()); text.sections[14].value = format!("\n\nTarget: {target_name}\nDistance: {distance}\nΔv {speed_readable}/s + {gforce:.1}g"); } else { + let speed = cam_v.length(); + let speed_readable = nature::readable_distance(speed); text.sections[14].value = format!("\nv {speed_readable}/s + {gforce:.1}g"); } }