From 8cd3d04f86d10b98bf70ca240fd96acd3f55e253 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Sat, 29 Nov 2025 09:18:47 -0600 Subject: [PATCH] fix: orbit prediction follows hill spheres --- crates/unified/src/client/starguide/orbit.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/unified/src/client/starguide/orbit.rs b/crates/unified/src/client/starguide/orbit.rs index c4a46b77d60707056d30ee6d549d50192ad5cb96..1b1e5fcc092fe50fd85a9f2f37c768c4c4345b1e 100644 --- a/crates/unified/src/client/starguide/orbit.rs +++ b/crates/unified/src/client/starguide/orbit.rs @@ -29,14 +29,24 @@ fn update_orbits( let Projection::Orthographic(ref projection) = camera.2.clone() else { return }; image.clear(&(Color::BLACK.to_srgba().to_u8_array())); - let mut p_mass = 1.0; + let mut p_mass = 0.0; let mut p_transform = Transform::default(); + let (sun_mass, _, sun_transform) = planets.iter().filter(|planet| planet.1.name == "Sun").next().unwrap(); for (mass, planet, transform) in planets { - if planet.name == "Earth" { + if planet.name == "Sun" { continue } + + let a = sun_transform.translation - transform.translation; + let hill_sphere = a.length()*(mass.0/(3.0*(sun_mass.0+mass.0))).powf(1.0/3.0); + if hill_sphere > (me.0.translation - transform.translation).length() { p_mass = mass.0; p_transform = *transform; + break; } } + if p_mass == 0.0 { + p_mass = sun_mass.0; + p_transform = *sun_transform; + } // orbit magic let rel_pos = me.0.translation - p_transform.translation;