diff --git a/assets/sounds/zoom.wav b/assets/sounds/zoom.wav new file mode 100644 index 0000000..6aba3f1 Binary files /dev/null and b/assets/sounds/zoom.wav differ diff --git a/src/screens/gameplay.rs b/src/screens/gameplay.rs index 7361ed0..a0acb56 100644 --- a/src/screens/gameplay.rs +++ b/src/screens/gameplay.rs @@ -3,7 +3,7 @@ use bevy::input::common_conditions::input_just_pressed; use bevy::input::mouse::MouseWheel; use bevy::input::touch::{TouchInput, TouchPhase}; -use crate::sun_system::{init_sun_system}; +use crate::sun_system::{init_sun_system, SolarSystemAssets}; use bevy::prelude::*; use crate::GameplaySystem; use crate::screens::Screen; @@ -51,19 +51,30 @@ fn change_time_speed(mut time: ResMut>) { } fn camera_zoom( - mut scroll_evr: MessageReader, + mut ev_scroll: EventReader, mut query: Query<(&mut Transform, &mut CameraZoom), With>, + mut commands: Commands, + assets: Res, ) { //stepped zoom with predefined levels let zoom_levels = [0.1, 0.15, 0.25, 0.5, 0.75]; if let Ok((mut transform, mut camera_zoom)) = query.single_mut() { - for ev in scroll_evr.read() { + for ev in ev_scroll.read() { + let old_level = camera_zoom.level; if ev.y > 0.0 && camera_zoom.level > 0 { camera_zoom.level -= 1; } else if ev.y < 0.0 && camera_zoom.level < zoom_levels.len() - 1 { camera_zoom.level += 1; } + + // Play zoom sound if level changed + if old_level != camera_zoom.level { + commands.spawn(( + AudioPlayer::new(assets.warning_sound.clone()), + PlaybackSettings::DESPAWN, + )); + } } let zoom_level = zoom_levels[camera_zoom.level]; @@ -75,6 +86,8 @@ fn camera_pinch_zoom( mut pinch: ResMut, mut er_touch: EventReader, mut query: Query<(&mut Transform, &mut CameraZoom), With>, + mut commands: Commands, + assets: Res, ) { // Update active touches map for ev in er_touch.read() { @@ -107,11 +120,21 @@ fn camera_pinch_zoom( if let Ok((mut transform, mut camera_zoom)) = query.single_mut() { // same zoom levels as mouse let zoom_levels = [0.1, 0.15, 0.25, 0.5, 0.75]; + let old_level = camera_zoom.level; if delta > 0.0 && camera_zoom.level < zoom_levels.len() - 1 { camera_zoom.level -= 1; } else if delta < 0.0 && camera_zoom.level > 0 { camera_zoom.level += 1; } + + // Play zoom sound if level changed + if old_level != camera_zoom.level { + commands.spawn(( + AudioPlayer::new(assets.warning_sound.clone()), + PlaybackSettings::DESPAWN, + )); + } + let zoom_level = zoom_levels[camera_zoom.level]; transform.scale = Vec3::splat(zoom_level); } diff --git a/src/sun_system/mod.rs b/src/sun_system/mod.rs index ea3ac7c..8350c7c 100644 --- a/src/sun_system/mod.rs +++ b/src/sun_system/mod.rs @@ -110,7 +110,7 @@ impl FromWorld for SolarSystemAssets { bg: assets.load("retro_grid_bg.png"), font: assets.load("fonts/lucon.ttf"), crash_sound: assets.load("sounds/collision.wav"), - warning_sound: assets.load("sounds/beepx3.wav"), + warning_sound: assets.load("sounds/zoom.wav"), music_loop: assets.load("sounds/music_loop.wav"), } }