diff --git a/src/client/camera.rs b/src/client/camera.rs index e128486..cb6ac25 100644 --- a/src/client/camera.rs +++ b/src/client/camera.rs @@ -26,6 +26,14 @@ impl Camera { Vector2::new(1.0, fsize.y / fsize.x) } } + pub fn inv_scale(&self, size: &Vector2) -> Vector2 { + let fsize: Vector2 = size.cast(); + if size.x < size.y { + Vector2::new(fsize.y / fsize.x, 1.0) + } else { + Vector2::new(1.0, fsize.x / fsize.y) + } + } } impl Default for Camera { diff --git a/src/client/render/output/data.rs b/src/client/render/output/data.rs index 622a987..6e6e65d 100644 --- a/src/client/render/output/data.rs +++ b/src/client/render/output/data.rs @@ -29,24 +29,25 @@ impl WindowView { visible_chunks.x.next_power_of_two(), visible_chunks.y.next_power_of_two(), ); - let adj_zoom = camera.zoom.level() - CHUNK_POW as i32; - let pos = camera.pos.zip_map(&rendered_chunks, |pos, rc| { - let p = (pos << adj_zoom).with_lens(1, 1); - let (pw, pd) = p.split_whole_dec(); - let mut chunk = (pw.parts().first().unwrap_or(&0) & (rc - 1)) as f32; - if pw.is_neg() { - chunk = rc as f32 - chunk; - } - let dec = f32::from(pd); - chunk + dec - }); - - let stretch = size.cast::() * camera.zoom.rel_zoom() / (CHUNK_WIDTH as f32); + // let adj_zoom = camera.zoom.level() - CHUNK_POW as i32; + // let pos = camera.pos.zip_map(&rendered_chunks, |pos, rc| { + // let p = (pos << adj_zoom).with_lens(1, 1); + // let (pw, pd) = p.split_whole_dec(); + // let mut chunk = (pw.parts().first().unwrap_or(&0) & (rc - 1)) as f32; + // if pw.is_neg() { + // chunk = rc as f32 - chunk; + // } + // let dec = f32::from(pd); + // chunk + dec + // }); + // + // let stretch = size.cast::() * camera.zoom.rel_zoom() / (CHUNK_WIDTH as f32); + let aspect = camera.inv_scale(size) * 2.0; let (pos, stretch) = if let Some(ss_cam) = ss_cam { let s = camera.zoom.mult() * ss_cam.zoom.inv_mult(); ( - ((&camera.pos - &ss_cam.pos) * ss_cam.zoom.inv_mult().clone()).map(f32::from) * 2.0, + ((&camera.pos - &ss_cam.pos) * ss_cam.zoom.inv_mult().clone()).map(f32::from).component_mul(&aspect), Vector2::from_element(f32::from(s)), ) } else {