diff --git a/CREDITS.md b/CREDITS.md index 158d03f..168f82f 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -54,6 +54,12 @@ https://grappe.itch.io/medal ### Sounds +#### Swing + +- https://freesound.org/people/Eponn/sounds/547040/ +- https://freesound.org/people/spycrah/sounds/471097/ +- https://freesound.org/people/Artninja/sounds/700220/ + ### Music https://shononoki.itch.io/bullet-hell-music-pack diff --git a/assets/sounds/strike_sound.ogg b/assets/sounds/strike_sound.ogg new file mode 100644 index 0000000..64a8087 Binary files /dev/null and b/assets/sounds/strike_sound.ogg differ diff --git a/src/assets.rs b/src/assets.rs index 0089cb9..a42f4f2 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -116,6 +116,10 @@ pub struct GameAssets { #[asset(path = "music/bgm.ogg")] pub bgm: Handle, + // --- SOUND --- + #[asset(path = "sounds/strike_sound.ogg")] + pub strike_sound: Handle, + // --- FONT --- #[asset(path = "fonts/PressStart2P.ttf")] pub font: Handle, diff --git a/src/audio/mod.rs b/src/audio/mod.rs index 7c98b9c..67c2112 100644 --- a/src/audio/mod.rs +++ b/src/audio/mod.rs @@ -1,7 +1,6 @@ mod bgm; mod sound; -#[allow(unused_imports)] pub use sound::PlaySound; use bevy::prelude::*; diff --git a/src/player/strike.rs b/src/player/strike.rs index 6d1a655..27a30e3 100644 --- a/src/player/strike.rs +++ b/src/player/strike.rs @@ -5,6 +5,7 @@ use bevy_rapier2d::prelude::*; use bevy_trickfilm::prelude::*; use crate::{ + audio::PlaySound, utils::{quat_from_vec2, FixedRotation}, world::camera::YSort, GameAssets, GameState, @@ -19,6 +20,8 @@ const OFFSET: Vec3 = Vec3::new(0.0, -10.0, 0.0); const CHAIN_COOLDOWN: f32 = 0.35; const STRIKE_COOLDOWN: f32 = 0.4; const STRIKE_CHAIN_COUNT: usize = 3; +const SOUND_PITCH_CHANGE: f64 = 0.1; +const SOUND_VOLUME: f64 = 0.7; #[derive(Resource, Default)] struct StrikeCooldown { @@ -120,6 +123,25 @@ fn despawn_strikes( } } +fn play_strike_sound( + assets: Res, + mut ev_spawn_strike: EventReader, + mut ev_play_sound: EventWriter, +) { + for ev in ev_spawn_strike.read() { + // Lower playback_rate for the last (third) strike + let playback_rate = if ev.strike_index == 2 { 1.0 } else { 1.5 }; + + ev_play_sound.send(PlaySound { + clip: assets.strike_sound.clone(), + volume: SOUND_VOLUME, + rand_speed_intensity: SOUND_PITCH_CHANGE, + playback_rate, + ..default() + }); + } +} + fn trigger_strike( player_input: Res, mouse_coords: Res, @@ -197,6 +219,7 @@ impl Plugin for PlayerStrikePlugin { ( spawn_strikes, despawn_strikes, + play_strike_sound, trigger_strike, reset_chain, tick_strike_cooldown,