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 avian2d::prelude::*;
use bevy::prelude::*; use bevy::{
input::mouse::{AccumulatedMouseScroll, MouseScrollUnit},
prelude::*,
};
use super::objects::Player; use super::objects::Player;
@ -38,3 +41,18 @@ pub fn move_camera(
) { ) {
camera.translation = camera.translation.lerp(player.translation, 0.05); 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; mod game;
use game::{ use game::{
runtime::{move_camera, move_player, quit}, runtime::{move_camera, move_player, quit, zoom_camera},
seed::Seed, seed::Seed,
setup::{setup_balls, setup_player, setup_pseudo_random, setup_ui, setup_walls}, setup::{setup_balls, setup_player, setup_pseudo_random, setup_ui, setup_walls},
}; };
@ -44,7 +44,11 @@ impl Plugin for AppSettings {
) )
.add_systems( .add_systems(
Update, 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); .add_systems(PostUpdate, move_camera);
} }