diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-06 12:01:42 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-06 12:01:42 -0400 |
| commit | 9788d9037ad7199701b1710c28559cb96bce5aec (patch) | |
| tree | c490b40b1f0057c98c2b4bb3c2593f915313d14f /src/tacmap.rs | |
| parent | d67fca88b17120566a93004c99dadeef0a61964b (diff) | |
| download | systemic4x-9788d9037ad7199701b1710c28559cb96bce5aec.tar.gz systemic4x-9788d9037ad7199701b1710c28559cb96bce5aec.tar.bz2 systemic4x-9788d9037ad7199701b1710c28559cb96bce5aec.zip | |
regenerate orbit lines based on system tick interval
Diffstat (limited to 'src/tacmap.rs')
| -rw-r--r-- | src/tacmap.rs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/tacmap.rs b/src/tacmap.rs index 8d9e2c4..c04cc92 100644 --- a/src/tacmap.rs +++ b/src/tacmap.rs @@ -117,12 +117,16 @@ impl TacticalMap self.body_renderer.rebuild(wgpuctx, solar_system); self.orbit_renderer.rebuild(wgpuctx, solar_system); - self.orbit_renderer.update(wgpuctx, solar_system, timeman.seconds()); + match self.orbit_renderer.update(wgpuctx, solar_system, timeman.seconds()) + { + Ok(()) => {}, + Err(e) => println!("Tactical map orbit render update error: {}", e) + } match self.body_renderer.update( wgpuctx, solar_system, timeman.seconds()) { Ok(()) => {}, - Err(e) => println!("Tactical map render update error: {}", e) + Err(e) => println!("Tactical map body render update error: {}", e) } Ok(()) @@ -162,14 +166,28 @@ impl TacticalMap let world_pos = solar_system.body_position(body); let local_pos = world_pos - self.camera.get_abs_position(); - let relative_pos = body.position() * self.camera.get_scale() as f64; - if relative_pos.magnitude() < 0.05 && relative_pos.magnitude() != 0.0 - { return; } + let origin_pos = match body.get_orbit() { + Some(orbit) => { + solar_system.body_position(&bodies[orbit.parent()]) + }, + None => cgmath::vec3(0.0, 0.0, 0.0) + }; + let origin_local_pos = origin_pos - self.camera.get_abs_position(); let scaled_pos = local_pos * self.camera.get_scale() as f64; + let scaled_origin_pos = origin_local_pos * self.camera.get_scale() as f64; let clip_pos = pv_matrix * scaled_pos.map(|v| { v as f32 }).extend(1.0); + let origin_clip_pos = pv_matrix * scaled_origin_pos.map(|v| { v as f32 }).extend(1.0); + let ndc_pos = clip_pos.truncate() / clip_pos.w; + let origin_ndc_pos = origin_clip_pos.truncate() / origin_clip_pos.w; + + if (ndc_pos - origin_ndc_pos).magnitude() < 0.05 { + if ndc_pos != origin_ndc_pos { + return; + } + } let screen_pos = egui::pos2( ((ndc_pos.x + 1.0) * 0.5) * screen_size.x, |
