~starkingdoms/starkingdoms

8cd3d04f86d10b98bf70ca240fd96acd3f55e253 — ghostly_zsh 16 days ago e5d6f42
fix: orbit prediction follows hill spheres
1 files changed, 12 insertions(+), 2 deletions(-)

M crates/unified/src/client/starguide/orbit.rs
M crates/unified/src/client/starguide/orbit.rs => crates/unified/src/client/starguide/orbit.rs +12 -2
@@ 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;