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..299bbae 100644 --- a/src/player/strike.rs +++ b/src/player/strike.rs @@ -1,10 +1,13 @@ use std::time::Duration; +use rand::{thread_rng, Rng}; + use bevy::prelude::*; use bevy_rapier2d::prelude::*; use bevy_trickfilm::prelude::*; use crate::{ + audio::PlaySound, utils::{quat_from_vec2, FixedRotation}, world::camera::YSort, GameAssets, GameState, @@ -19,6 +22,7 @@ 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; #[derive(Resource, Default)] struct StrikeCooldown { @@ -120,6 +124,21 @@ fn despawn_strikes( } } +fn play_strike_sound( + assets: Res, + mut ev_spawn_strike: EventReader, + mut ev_play_sound: EventWriter, +) { + let mut rng = thread_rng(); + for _ in ev_spawn_strike.read() { + ev_play_sound.send(PlaySound { + clip: assets.strike_sound.clone(), + playback_rate: 1.0 + rng.gen_range(-1.0..1.0) * SOUND_PITCH_CHANGE, + ..default() + }); + } +} + fn trigger_strike( player_input: Res, mouse_coords: Res, @@ -197,6 +216,7 @@ impl Plugin for PlayerStrikePlugin { ( spawn_strikes, despawn_strikes, + play_strike_sound, trigger_strike, reset_chain, tick_strike_cooldown,