From 371471c3e8a77f8554c0963009cd16748dae3795 Mon Sep 17 00:00:00 2001 From: ShenMian Date: Tue, 23 Jan 2024 13:36:59 +0800 Subject: [PATCH] feat: improve automatically viewport zoom when switching levels Window size is also a consideration. --- src/systems/level.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/systems/level.rs b/src/systems/level.rs index 112b385..918bc59 100644 --- a/src/systems/level.rs +++ b/src/systems/level.rs @@ -50,6 +50,7 @@ pub fn spawn_board( mut commands: Commands, database: Res, mut camera: Query<(&mut Transform, &mut MainCamera)>, + window: Query<&Window>, board: Query>, level_id: Res, asset_server: Res, @@ -76,7 +77,16 @@ pub fn spawn_board( let (mut transform, mut main_camera) = camera.single_mut(); transform.translation.x = (board_size.x - tile_size.x) / 2.0; transform.translation.y = (board_size.y + tile_size.y) / 2.0; - main_camera.target_scale = 0.2 * (cmp::max(level.dimensions.x, level.dimensions.y) as f32); + + let window = window.single(); + let width_scale = board_size.x / window.resolution.width(); + let height_scale = board_size.y / window.resolution.height(); + let scale = if width_scale > height_scale { + width_scale + } else { + height_scale + }; + main_camera.target_scale = scale / 0.9; // despawn the previous `Board` commands.entity(board.single()).despawn_recursive();