From 3d3864171785c589872bf23faaaa3a421f56ee4e Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Wed, 22 Apr 2026 10:51:13 -0400 Subject: complete orbit camera. add most large solar bodies --- src/tacmap/render.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/tacmap/render.rs') diff --git a/src/tacmap/render.rs b/src/tacmap/render.rs index 0f6b409..26d6977 100644 --- a/src/tacmap/render.rs +++ b/src/tacmap/render.rs @@ -9,7 +9,7 @@ use crate::{solar_system::{SolarSystem, SystemId}, timeman::Second, vertex::{sel struct BodyInstance { - position: cgmath::Point3, + position: cgmath::Vector3, radius: f32 } @@ -36,6 +36,7 @@ pub struct BodyRenderer { needs_rebuild: bool, last_time: Option, + last_pos: Option>, pipeline: wgpu::RenderPipeline, @@ -73,6 +74,7 @@ impl BodyRenderer Self { needs_rebuild: true, last_time: None, + last_pos: None, pipeline: render_pipeline, body_vertex_buffer, body_instance_buffer: None @@ -113,6 +115,7 @@ impl BodyRenderer ); self.last_time = None; + self.last_pos = None; self.body_instance_buffer = Some((bodies.len(), buffer)); } @@ -120,21 +123,21 @@ impl BodyRenderer &mut self, wgpuctx: &WgpuCtx, solar_system: &SolarSystem, + camera: &Camera, time: Second) -> Result<(), Box> { //If the last updated time is the same, we don't need to update //the positions of all the bodies. - match self.last_time { - Some(last_time) => { - if last_time == time { - return Ok(()); - } + if self.last_time.is_some_and(|last_time| { last_time == time }) { + if self.last_pos.is_some_and(|last_pos| { last_pos == camera.get_abs_position() }) { + return Ok(()) } - None => {} } self.last_time = Some(time); + self.last_pos = Some(camera.get_abs_position()); + let (_, bodies_buffer) = match &self.body_instance_buffer { Some(tuple) => tuple, None => return Err(Box::new(NeedsRebuildError)) @@ -142,9 +145,9 @@ impl BodyRenderer let bodies = solar_system.bodies(); let body_instances = bodies.iter().map(|body| { - let position = body.position(); + let position = solar_system.body_position(body); BodyInstance { - position: position, + position: (position - self.last_pos.unwrap()), radius: body.radius() }.raw() }).collect::>(); -- cgit v1.2.3