diff --git a/assets/flappy/bonk.ogg b/assets/flappy/bonk.ogg new file mode 100644 index 0000000..7313612 --- /dev/null +++ b/assets/flappy/bonk.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:710db7451bb7857b9140dfe6afe4621ea2188ad65eda3919c569d1bb285b933d +size 6562 diff --git a/assets/flappy/flap.ogg b/assets/flappy/flap.ogg new file mode 100644 index 0000000..3cb4390 --- /dev/null +++ b/assets/flappy/flap.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59775f8979a396c8a793b0a1db206d5bdc651eae808d858e9acaee8ebda5bc6d +size 8490 diff --git a/assets/flappy/rewind-start.ogg b/assets/flappy/rewind-start.ogg new file mode 100644 index 0000000..067b7a0 --- /dev/null +++ b/assets/flappy/rewind-start.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36b4ea107222d073c67ca64dde26944975609202d5090b2f2021213c1a7e35cd +size 12035 diff --git a/src/bin/flappy/main.rs b/src/bin/flappy/main.rs index e9c73f1..b9ebe2b 100644 --- a/src/bin/flappy/main.rs +++ b/src/bin/flappy/main.rs @@ -1,6 +1,7 @@ // Bevy basically forces "complex types" with Querys #![allow(clippy::type_complexity)] +use bevy::audio::PlaybackMode; use bevy::render::view::ColorGrading; use games::physics2d::*; use games::*; @@ -38,7 +39,7 @@ fn main() { ), ) .add_systems(OnEnter(PlayerState::Alive), alive_bird) - .add_systems(OnEnter(PlayerState::Rewind), alive_bird) + .add_systems(OnEnter(PlayerState::Rewind), (start_rewinding, alive_bird)) .add_systems(OnEnter(PlayerState::Pause), pause_bird) .add_systems(OnEnter(PlayerState::Stasis), pause_bird) .add_systems( @@ -403,6 +404,15 @@ fn init_assets( bird_assets.mesh = Mesh2d(meshes.add(Rectangle::new(1.0, 1.2))); } +#[derive(Component)] +struct FlapSfx; + +#[derive(Component)] +struct BonkSfx; + +#[derive(Component)] +struct RewindSfx; + fn init_ui(mut commands: Commands) { commands .spawn(( @@ -598,6 +608,8 @@ fn flap( trigger: Trigger, mut bird: Query<&mut ExternalImpulse, With>, mut flaps: ResMut, + server: ResMut, + mut commands: Commands, ) { debug!("real flap for {:?}", trigger.target()); // Increment flap stat @@ -606,6 +618,13 @@ fn flap( // Flap birds wings if let Ok(mut f) = bird.get_mut(trigger.target()) { f.apply_impulse(Vec2::Y * 5000.0 + Vec2::X * 1000.0); + + // Play flap sfx + commands.spawn(( + AudioPlayer::new(server.load("flappy/bonk.ogg")), + PlaybackSettings { mode: PlaybackMode::Despawn, ..default() }, + BonkSfx, + )); } } @@ -746,6 +765,8 @@ fn detect_dead( bird: Single<&ColliderAabb, With>, obstacles: Query<&ColliderAabb, Or<(With, With, With)>>, mut next: ResMut>, + server: ResMut, + mut commands: Commands, ) { #[cfg(debug_assertions)] debug_assert!( @@ -755,6 +776,13 @@ fn detect_dead( if obstacles.iter().any(|obstacle| bird.intersects(obstacle)) { next.set(PlayerState::Stasis); + + // Play bonk sfx + commands.spawn(( + AudioPlayer::new(server.load("flappy/flap.ogg")), + PlaybackSettings { mode: PlaybackMode::Despawn, ..default() }, + FlapSfx, + )); } } @@ -955,3 +983,14 @@ fn debug_trail( }); }) } + +fn start_rewinding( + server: ResMut, + mut commands: Commands, +) { + commands.spawn(( + AudioPlayer::new(server.load("flappy/rewind-start.ogg")), + PlaybackSettings { mode: PlaybackMode::Despawn, ..default() }, + RewindSfx, + )); +}