Add zoom function
All checks were successful
CI / Formatting (push) Successful in 1m3s

man it took me so long to find out that Rust has a `ref` keyword lol
This commit is contained in:
Michael Bradley 2025-05-19 18:03:39 -04:00
parent 214e0ceedc
commit 245dfde91e
Signed by: MichaelBradley
SSH key fingerprint: SHA256:BKO2eI2LPsCbQS3n3i5SdwZTAIV3F1lHezR07qP+Ob0
2 changed files with 25 additions and 3 deletions

View file

@ -1,5 +1,8 @@
use avian2d::prelude::*;
use bevy::prelude::*;
use bevy::{
input::mouse::{AccumulatedMouseScroll, MouseScrollUnit},
prelude::*,
};
use super::objects::Player;
@ -38,3 +41,18 @@ pub fn move_camera(
) {
camera.translation = camera.translation.lerp(player.translation, 0.05);
}
pub fn zoom_camera(
mut camera: Single<&mut Projection, With<IsDefaultUiCamera>>,
scroll: Res<AccumulatedMouseScroll>,
) -> Result {
let Projection::Orthographic(ref mut projection) = **camera else {
return Err("Default camera was not orthographic".into());
};
let scroll_type_multiplier = match scroll.unit {
MouseScrollUnit::Line => 0.01,
MouseScrollUnit::Pixel => 0.001,
};
projection.scale = (projection.scale - scroll.delta.y * scroll_type_multiplier).clamp(0.1, 2.5);
Ok(())
}

View file

@ -5,7 +5,7 @@ use clap::Parser;
mod game;
use game::{
runtime::{move_camera, move_player, quit},
runtime::{move_camera, move_player, quit, zoom_camera},
seed::Seed,
setup::{setup_balls, setup_player, setup_pseudo_random, setup_ui, setup_walls},
};
@ -44,7 +44,11 @@ impl Plugin for AppSettings {
)
.add_systems(
Update,
(move_player, quit.run_if(input_pressed(KeyCode::KeyQ))),
(
move_player,
quit.run_if(input_pressed(KeyCode::KeyQ)),
zoom_camera,
),
)
.add_systems(PostUpdate, move_camera);
}