summaryrefslogtreecommitdiffstats
path: root/src/tacmap.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tacmap.rs')
-rw-r--r--src/tacmap.rs28
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,