From bfe0227c9112f026f2d7e331b5b8d7f7705d94f4 Mon Sep 17 00:00:00 2001 From: Suna AI Agent Date: Sun, 19 Oct 2025 07:18:48 +0000 Subject: [PATCH 1/2] Add zoom sound effect - Added SolarSystemAssets import to gameplay module - Implemented zoom sound playback in camera_zoom function - Added zoom sound to camera_pinch_zoom function (mobile) - Sound plays only when zoom level actually changes - Works for both mouse wheel and pinch-to-zoom gestures - Using warning_sound as placeholder (can be replaced) - Provides audio feedback for zoom actions - Prevents sound spam by checking level change --- src/screens/gameplay.rs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) 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); } From 0afac2261001164845b5d292d672084b94114194 Mon Sep 17 00:00:00 2001 From: wannerdev <7975579+wannerdev@users.noreply.github.com> Date: Fri, 24 Oct 2025 07:04:56 +0200 Subject: [PATCH 2/2] new sound --- assets/sounds/zoom.wav | Bin 0 -> 20496 bytes src/sun_system/mod.rs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/sounds/zoom.wav diff --git a/assets/sounds/zoom.wav b/assets/sounds/zoom.wav new file mode 100644 index 0000000000000000000000000000000000000000..6aba3f1ec14d188483ea7f5c87090a07a59acc50 GIT binary patch literal 20496 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 CZ2?LE literal 0 HcmV?d00001 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"), } }