From ec496535705de0c88de36c62bb2ef0a9bab3d464 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Fri, 28 Nov 2025 12:03:43 -0600 Subject: [PATCH] fix: zoom uses projection now --- crates/unified/src/client/starfield.rs | 23 ++++++++++++++--------- crates/unified/src/client/zoom.rs | 24 +++++++++++++----------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/crates/unified/src/client/starfield.rs b/crates/unified/src/client/starfield.rs index 7043cde5132e13184d27450cab571961c978b2aa..138f7e9841e9411168df6121afaeb65ea78300e0 100644 --- a/crates/unified/src/client/starfield.rs +++ b/crates/unified/src/client/starfield.rs @@ -184,7 +184,7 @@ pub fn resize_starfield( ), >, mut resize_event: MessageReader, - camera: Single<&Transform, With>, + camera: Single<&Projection, With>, ) { for event in resize_event.read() { let Ok(mut starfield_back) = starfield_back.single_mut() else { @@ -199,23 +199,25 @@ pub fn resize_starfield( warn!("{:?}: no such entity!", stringify!(starfield_front)); return; }; + let Projection::Orthographic(projection) = *camera else { + return + }; /*if camera.scale.z > 10.0 { // arbitrary // TODO: find out how to disable sprites // done } else { // TODO: find out how to reenable them without toggling on every update :( }*/ - starfield_back.custom_size = Some( - Vec2::new(event.width, event.height) * camera.scale.z + Vec2::new(event.width, event.height) * projection.scale + Vec2::splat(BACK_STARFIELD_SIZE * 2.0), ); starfield_mid.custom_size = Some( - Vec2::new(event.width, event.height) * camera.scale.z + Vec2::new(event.width, event.height) * projection.scale + Vec2::splat(MID_STARFIELD_SIZE * 2.0), ); starfield_front.custom_size = Some( - Vec2::new(event.width, event.height) * camera.scale.z + Vec2::new(event.width, event.height) * projection.scale + Vec2::splat(FRONT_STARFIELD_SIZE * 2.0), ); } @@ -262,7 +264,7 @@ pub fn update_starfield( >, window: Single<&Window>, camera: Single< - &Transform, + &Projection, ( With, Without, @@ -276,27 +278,30 @@ pub fn update_starfield( let Some(player) = player.iter().next() else { return; }; + let Projection::Orthographic(projection) = *camera else { + return + }; let mut starfield_back_pos = starfield_back.single_mut().unwrap(); let mut starfield_mid_pos = starfield_mid.single_mut().unwrap(); let mut starfield_front_pos = starfield_front.single_mut().unwrap(); //starfield_pos.translation = (player.translation / STARFIELD_SIZE).round() * STARFIELD_SIZE; starfield_back_pos.translation = player.translation + (-player.translation / 3.0) % BACK_STARFIELD_SIZE - + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * camera.scale.z + + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * projection.scale / 2.0) % BACK_STARFIELD_SIZE + Vec3::new(0.0, BACK_STARFIELD_SIZE, 0.0) - Vec3::new(0.0, 0.0, 5.0); starfield_mid_pos.translation = player.translation + (-player.translation / 2.5) % MID_STARFIELD_SIZE - + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * camera.scale.z + + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * projection.scale / 2.0) % MID_STARFIELD_SIZE + Vec3::new(0.0, MID_STARFIELD_SIZE, 0.0) - Vec3::new(0.0, 0.0, 4.5); starfield_front_pos.translation = player.translation + (-player.translation / 2.0) % FRONT_STARFIELD_SIZE - + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * camera.scale.z + + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) * projection.scale / 2.0) % FRONT_STARFIELD_SIZE + Vec3::new(0.0, FRONT_STARFIELD_SIZE, 0.0) diff --git a/crates/unified/src/client/zoom.rs b/crates/unified/src/client/zoom.rs index 686577f298315a936751b204b1ade0876c083f96..fc022f7a47d0225ac2a21bbfdb73b2995153e131 100644 --- a/crates/unified/src/client/zoom.rs +++ b/crates/unified/src/client/zoom.rs @@ -65,7 +65,7 @@ fn on_scroll( ), >, mut camera: Single< - (&mut Camera, &mut Transform), + (&mut Camera, &mut Transform, &mut Projection), ( With, Without, @@ -92,18 +92,19 @@ fn on_scroll( let (mut starfield_mid, mut starfield_mid_pos, mut visibility_mid, size_mid) = starfield_mid.into_inner(); let (mut starfield_front, mut starfield_front_pos, mut visibility_front, size_front) = starfield_front.into_inner(); + let Projection::Orthographic(ref mut camera_projection) = camera.2.clone() else { return }; for event in scroll_events.read() { match event.unit { MouseScrollUnit::Line | MouseScrollUnit::Pixel => { if event.y > 0.0 { - camera.1.scale *= 0.97; + camera_projection.scale *= 0.97; starguide_camera.1.scale *= 0.97; } else { - camera.1.scale *= 1.03; + camera_projection.scale *= 1.03; starguide_camera.1.scale *= 1.03; } - if camera.1.scale.z > 20.0 && matches!(gameplay_state.get(), GameplayState::Main) { + if camera_projection.scale > 20.0 && matches!(gameplay_state.get(), GameplayState::Main) { camera.0.is_active = false; starguide_camera.0.is_active = true; orbit_camera.is_active = true; @@ -117,7 +118,7 @@ fn on_scroll( *visibility_back = Visibility::Hidden; *visibility_mid = Visibility::Hidden; *visibility_front = Visibility::Hidden; - } else if camera.1.scale.z <= 20.0 && matches!(gameplay_state.get(), GameplayState::Starguide) { + } else if camera_projection.scale <= 20.0 && matches!(gameplay_state.get(), GameplayState::Starguide) { camera.0.is_active = true; gameplay_next_state.set(GameplayState::Main); starguide_camera.0.is_active = false; @@ -151,15 +152,15 @@ fn on_scroll( *visibility_front = Visibility::Inherited; } starfield_back.custom_size = - Some(window.size() * camera.1.scale.z + Vec2::splat(BACK_STARFIELD_SIZE * 2.0)); + Some(window.size() * camera_projection.scale + Vec2::splat(BACK_STARFIELD_SIZE * 2.0)); starfield_mid.custom_size = - Some(window.size() * camera.1.scale.z + Vec2::splat(MID_STARFIELD_SIZE * 2.0)); + Some(window.size() * camera_projection.scale + Vec2::splat(MID_STARFIELD_SIZE * 2.0)); starfield_front.custom_size = - Some(window.size() * camera.1.scale.z + Vec2::splat(FRONT_STARFIELD_SIZE * 2.0)); + Some(window.size() * camera_projection.scale + Vec2::splat(FRONT_STARFIELD_SIZE * 2.0)); starfield_back_pos.translation = player.translation + (-player.translation / 3.0) % BACK_STARFIELD_SIZE + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) - * camera.1.scale.z + * camera_projection.scale / 2.0) % BACK_STARFIELD_SIZE + Vec3::new(0.0, BACK_STARFIELD_SIZE, 0.0) @@ -167,7 +168,7 @@ fn on_scroll( starfield_mid_pos.translation = player.translation + (-player.translation / 2.5) % MID_STARFIELD_SIZE + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) - * camera.1.scale.z + * camera_projection.scale / 2.0) % MID_STARFIELD_SIZE + Vec3::new(0.0, MID_STARFIELD_SIZE, 0.0) @@ -175,7 +176,7 @@ fn on_scroll( starfield_front_pos.translation = player.translation + (-player.translation / 2.0) % FRONT_STARFIELD_SIZE + (Vec3::new(window.resolution.width(), -window.resolution.height(), 0.0) - * camera.1.scale.z + * camera_projection.scale / 2.0) % FRONT_STARFIELD_SIZE + Vec3::new(0.0, FRONT_STARFIELD_SIZE, 0.0) @@ -183,4 +184,5 @@ fn on_scroll( } } } + *camera.2 = Projection::Orthographic(camera_projection.clone()); }