From 79da2e9234e130801b1afe9b10de50418a0ffc7f Mon Sep 17 00:00:00 2001 From: Erick Date: Thu, 5 May 2022 13:53:53 -0300 Subject: [PATCH] feat: game over voice over (#320) * feat: game over voice over * docs nits * fixing rebase --- .../components/game_bloc_status_listener.dart | 1 + .../assets/sfx/game_over_voice_over.mp3 | Bin 0 -> 28939 bytes .../pinball_audio/lib/gen/assets.gen.dart | 1 + .../pinball_audio/lib/src/pinball_audio.dart | 22 +++++++++++------- .../test/src/pinball_audio_test.dart | 18 ++++++++++++++ .../game_bloc_status_listener_test.dart | 12 ++++++++++ 6 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 packages/pinball_audio/assets/sfx/game_over_voice_over.mp3 diff --git a/lib/game/components/game_bloc_status_listener.dart b/lib/game/components/game_bloc_status_listener.dart index 1984a523..c0ddf6c0 100644 --- a/lib/game/components/game_bloc_status_listener.dart +++ b/lib/game/components/game_bloc_status_listener.dart @@ -22,6 +22,7 @@ class GameBlocStatusListener extends Component gameRef.overlays.remove(PinballGame.playButtonOverlay); break; case GameStatus.gameOver: + gameRef.player.play(PinballAudio.gameOverVoiceOver); gameRef.descendants().whereType().first.requestInitials( score: state.displayScore, character: gameRef.characterTheme, diff --git a/packages/pinball_audio/assets/sfx/game_over_voice_over.mp3 b/packages/pinball_audio/assets/sfx/game_over_voice_over.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2f2ae5907c7c2bac24bb65a80002bc110b6237f7 GIT binary patch literal 28939 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 'assets/sfx/bumper_a.mp3'; String get bumperB => 'assets/sfx/bumper_b.mp3'; + String get gameOverVoiceOver => 'assets/sfx/game_over_voice_over.mp3'; String get google => 'assets/sfx/google.mp3'; String get ioPinballVoiceOver => 'assets/sfx/io_pinball_voice_over.mp3'; } diff --git a/packages/pinball_audio/lib/src/pinball_audio.dart b/packages/pinball_audio/lib/src/pinball_audio.dart index a859a86f..dd3e8242 100644 --- a/packages/pinball_audio/lib/src/pinball_audio.dart +++ b/packages/pinball_audio/lib/src/pinball_audio.dart @@ -18,7 +18,10 @@ enum PinballAudio { backgroundMusic, /// IO Pinball voice over - ioPinballVoiceOver + ioPinballVoiceOver, + + /// Game over + gameOverVoiceOver, } /// Defines the contract of the creation of an [AudioPool]. @@ -30,20 +33,16 @@ typedef CreateAudioPool = Future Function( String? prefix, }); -/// Function that defines the contract for playing a single -/// audio +/// Defines the contract for playing a single audio. typedef PlaySingleAudio = Future Function(String); -/// Function that defines the contract for looping a single -/// audio +/// Defines the contract for looping a single audio. typedef LoopSingleAudio = Future Function(String); -/// Function that defines the contract for pre fetching an -/// audio +/// Defines the contract for pre fetching an audio. typedef PreCacheSingleAudio = Future Function(String); -/// Function that defines the contract for configuring -/// an [AudioCache] instance +/// Defines the contract for configuring an [AudioCache] instance. typedef ConfigureAudioCache = void Function(AudioCache); abstract class _Audio { @@ -164,6 +163,11 @@ class PinballPlayer { playSingleAudio: _playSingleAudio, path: Assets.sfx.ioPinballVoiceOver, ), + PinballAudio.gameOverVoiceOver: _SimplePlayAudio( + preCacheSingleAudio: _preCacheSingleAudio, + playSingleAudio: _playSingleAudio, + path: Assets.sfx.gameOverVoiceOver, + ), PinballAudio.bumper: _BumperAudio( createAudioPool: _createAudioPool, seed: _seed, diff --git a/packages/pinball_audio/test/src/pinball_audio_test.dart b/packages/pinball_audio/test/src/pinball_audio_test.dart index 8740cda0..b7760aa5 100644 --- a/packages/pinball_audio/test/src/pinball_audio_test.dart +++ b/packages/pinball_audio/test/src/pinball_audio_test.dart @@ -146,6 +146,11 @@ void main() { 'packages/pinball_audio/assets/sfx/io_pinball_voice_over.mp3', ), ).called(1); + verify( + () => preCacheSingleAudio.onCall( + 'packages/pinball_audio/assets/sfx/game_over_voice_over.mp3', + ), + ).called(1); verify( () => preCacheSingleAudio .onCall('packages/pinball_audio/assets/music/background.mp3'), @@ -227,6 +232,19 @@ void main() { }); }); + group('gameOverVoiceOver', () { + test('plays the correct file', () async { + await Future.wait(player.load()); + player.play(PinballAudio.gameOverVoiceOver); + + verify( + () => playSingleAudio.onCall( + 'packages/pinball_audio/${Assets.sfx.gameOverVoiceOver}', + ), + ).called(1); + }); + }); + group('backgroundMusic', () { test('plays the correct file', () async { await Future.wait(player.load()); diff --git a/test/game/components/game_bloc_status_listener_test.dart b/test/game/components/game_bloc_status_listener_test.dart index 4bb313e6..a614a2e2 100644 --- a/test/game/components/game_bloc_status_listener_test.dart +++ b/test/game/components/game_bloc_status_listener_test.dart @@ -128,6 +128,18 @@ void main() { .called(1); }, ); + + test( + 'plays the game over voice over when it is game over', + () { + gameFlowController.onNewState( + GameState.initial().copyWith(status: GameStatus.gameOver), + ); + + verify(() => pinballPlayer.play(PinballAudio.gameOverVoiceOver)) + .called(1); + }, + ); }); }); }