implement displayed_mass_kg command, add masses for planets/moons

This commit is contained in:
yuni 2024-11-30 00:13:59 +01:00
parent 80b20003ba
commit fbc1b236b0
4 changed files with 48 additions and 3 deletions

View file

@ -86,6 +86,7 @@ struct ParserState {
velocity: DVec3,
angular_momentum: DVec3,
pronoun: Option<String>,
displayed_mass: Option<f64>,
message_on_entry: Option<String>,
chat_counts_towards_achievements: bool,
is_sphere: bool,
@ -153,6 +154,7 @@ impl Default for ParserState {
velocity: DVec3::splat(0.0),
angular_momentum: DVec3::new(0.03, 0.3, 0.09),
pronoun: None,
displayed_mass: None,
message_on_entry: None,
chat_counts_towards_achievements: true,
is_sphere: false,
@ -515,6 +517,14 @@ pub fn load_defs(mut ew_spawn: EventWriter<SpawnEvent>) {
["pronoun", pronoun] => {
state.pronoun = Some(pronoun.to_string());
}
["displayed_mass_kg", mass] => {
if let Ok(mass_float) = mass.parse::<f64>() {
state.displayed_mass = Some(mass_float);
} else {
error!("Can't parse float: {line}");
continue;
}
}
["chatid", chat] => {
state.chat = chat.to_string();
}
@ -1507,6 +1517,7 @@ fn spawn_entities(
actor.insert(hud::IsClickable {
name: state.name.clone(),
pronoun: state.pronoun.clone(),
displayed_mass: state.displayed_mass.clone(),
..default()
});
}

View file

@ -4,6 +4,7 @@ actor 0 0 0
scale 695700e3
sphere yes
sun yes
displayed_mass_kg 1.9885e30
physics off
actor 0 0 0 mercury
name Mercury
@ -11,6 +12,7 @@ actor 0 0 0
sphere yes
physics off
scale 2439.7e3
displayed_mass_kg 3.3011e23
axialtilt 0.034
orbitaround sol 57.91e9
actor 0 0 0 orbitring
@ -24,6 +26,7 @@ actor 0 0 0
sphere yes
physics off
scale 6115e3
displayed_mass_kg 4.8675e24
axialtilt 177.36
orbitaround sol 108.21e9
actor 0 0 0 orbitring
@ -38,6 +41,7 @@ actor 0 0 0
sphere yes
physics off
scale 6371e3
displayed_mass_kg 5.972168e24
axialtilt 23.4392811
orbitaround sol 149.598023e9
actor 0 0 0 orbitring
@ -53,6 +57,7 @@ actor 0 0 0
tidally locked
angularmomentum 0 0 0
scale 1737.4e3
displayed_mass_kg 7.346e22
rotationz 90
sphere yes
moon yes
@ -68,6 +73,7 @@ actor 0 0 0
sphere yes
physics off
scale 3389.5e3
displayed_mass_kg 6.4171e23
axialtilt 25.19
orbitaround sol 227.939366e9
actor 0 0 0 orbitring
@ -81,6 +87,7 @@ actor 0 0 0
id jupiter
name Jupiter
scale 69911e3
displayed_mass_kg 1.8982e27
planet yes
sphere yes
ring yes
@ -186,6 +193,7 @@ actor 0 0 0
orbitaround jupiter 421700e3
tidally locked
scale 1822e3
displayed_mass_kg 8.931938e22
angularmomentum 0 0 0
sphere yes
moon yes
@ -202,6 +210,7 @@ actor 0 0 0
orbitaround jupiter 670900e3
tidally locked
scale 1561e3
displayed_mass_kg 4.79984e22
angularmomentum 0 0 0
sphere yes
moon yes
@ -218,6 +227,7 @@ actor 0 0 0
orbitaround jupiter 1070400e3
tidally locked
scale 2634e3
displayed_mass_kg 1.4819e23
angularmomentum 0 0 0
sphere yes
moon yes
@ -234,6 +244,7 @@ actor 0 0 0
orbitaround jupiter 1882700e3
tidally locked
scale 2410e3
displayed_mass_kg 1.075938e23
angularmomentum 0 0 0
sphere yes
moon yes
@ -251,6 +262,7 @@ actor 0 0 0
aurora yes
physics off
scale 58232e3
displayed_mass_kg 5.6834e26
axialtilt 26.73
orbitaround sol 1433.53e9
actor 0 0 0 orbitring
@ -265,6 +277,7 @@ actor 0 0 0
ring yes
physics off
scale 25362e3
displayed_mass_kg 8.6810e25
axialtilt 82.23
orbitaround sol 2870.972e9
actor 0 0 0 orbitring
@ -279,6 +292,7 @@ actor 0 0 0
ring yes
physics off
scale 24622e3
displayed_mass_kg 1.02409e26
axialtilt 28.32
orbitaround sol 4500e9
actor 0 0 0 orbitring
@ -288,6 +302,7 @@ actor 0 0 0
orbitring yes
actor 0 0 0
name Pluto
displayed_mass_kg 1.3025e22
orbitaround sol 5906.38e9
actor 0 0 0 orbitring
scale 5906.38e9

View file

@ -264,6 +264,7 @@ impl Message {
pub struct IsClickable {
pub name: Option<String>,
pub pronoun: Option<String>,
pub displayed_mass: Option<f64>,
pub distance: Option<f64>,
pub disable_in_map: bool,
}
@ -272,6 +273,7 @@ impl Default for IsClickable {
Self {
name: None,
pronoun: None,
displayed_mass: None,
distance: None,
disable_in_map: false,
}
@ -1066,13 +1068,15 @@ fn update_hud(
"".to_string()
};
let size = nature::readable_si(trans.scale.x as f64 * 2.0);
let mass = if let Some(mass) = mass {
nature::readable_si(mass.0 * 0.001)
let mass = if let Some(mass) = clickable.displayed_mass {
nature::readable_mass(mass)
} else if let Some(mass) = mass {
nature::readable_mass(mass.0)
} else {
String::from("?")
};
text.sections[0].value =
format!("Target: {target_name}\n{pronoun}Distance: {distance}\nSize: {size}m\nMass: {mass}g\n\n");
format!("Target: {target_name}\n{pronoun}Distance: {distance}\nSize: {size}m\nMass: {mass}\n\n");
} else {
text.sections[0].value = "".to_string();
}

View file

@ -157,6 +157,21 @@ pub fn readable_speed(speed: f64) -> String {
}
}
/// Unit: kg
pub fn readable_mass(value: f64) -> String {
if value > SOL_MASS * 0.0001 {
return format!("{:.5} Suns", value / SOL_MASS);
} else if value > EARTH_MASS * 0.0001 {
return format!("{:.5} Earths", value / EARTH_MASS);
} else if value > 1e6 {
return format!("{value:.2e} kg").replace("e", " x 10^");
} else if value >= 10.0 {
return format!("{value:.0} kg");
} else {
return readable_si(value * 1000.0) + "g";
}
}
pub fn readable_si(value: f64) -> String {
let abs = value.abs();
if abs > 1e13 {