|
|
@ -116,73 +116,45 @@ class _LoopAudio extends _Audio {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class _BumperAudio extends _Audio {
|
|
|
|
class _RandomABAudio extends _Audio {
|
|
|
|
_BumperAudio({
|
|
|
|
_RandomABAudio({
|
|
|
|
required this.createAudioPool,
|
|
|
|
required this.createAudioPool,
|
|
|
|
required this.seed,
|
|
|
|
required this.seed,
|
|
|
|
|
|
|
|
required this.audioAssetA,
|
|
|
|
|
|
|
|
required this.audioAssetB,
|
|
|
|
|
|
|
|
this.volume,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
final CreateAudioPool createAudioPool;
|
|
|
|
final CreateAudioPool createAudioPool;
|
|
|
|
final Random seed;
|
|
|
|
final Random seed;
|
|
|
|
|
|
|
|
final String audioAssetA;
|
|
|
|
|
|
|
|
final String audioAssetB;
|
|
|
|
|
|
|
|
final double? volume;
|
|
|
|
|
|
|
|
|
|
|
|
late AudioPool bumperA;
|
|
|
|
late AudioPool audioA;
|
|
|
|
late AudioPool bumperB;
|
|
|
|
late AudioPool audioB;
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Future<void> load() async {
|
|
|
|
Future<void> load() async {
|
|
|
|
await Future.wait(
|
|
|
|
await Future.wait(
|
|
|
|
[
|
|
|
|
[
|
|
|
|
createAudioPool(
|
|
|
|
createAudioPool(
|
|
|
|
prefixFile(Assets.sfx.bumperA),
|
|
|
|
prefixFile(audioAssetA),
|
|
|
|
maxPlayers: 4,
|
|
|
|
maxPlayers: 4,
|
|
|
|
prefix: '',
|
|
|
|
prefix: '',
|
|
|
|
).then((pool) => bumperA = pool),
|
|
|
|
).then((pool) => audioA = pool),
|
|
|
|
createAudioPool(
|
|
|
|
createAudioPool(
|
|
|
|
prefixFile(Assets.sfx.bumperB),
|
|
|
|
prefixFile(audioAssetB),
|
|
|
|
maxPlayers: 4,
|
|
|
|
maxPlayers: 4,
|
|
|
|
prefix: '',
|
|
|
|
prefix: '',
|
|
|
|
).then((pool) => bumperB = pool),
|
|
|
|
).then((pool) => audioB = pool),
|
|
|
|
],
|
|
|
|
],
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
void play() {
|
|
|
|
void play() {
|
|
|
|
(seed.nextBool() ? bumperA : bumperB).start(volume: 0.6);
|
|
|
|
(seed.nextBool() ? audioA : audioB).start(volume: volume ?? 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _KickerAudio extends _Audio {
|
|
|
|
|
|
|
|
_KickerAudio({
|
|
|
|
|
|
|
|
required this.createAudioPool,
|
|
|
|
|
|
|
|
required this.seed,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final CreateAudioPool createAudioPool;
|
|
|
|
|
|
|
|
final Random seed;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
late AudioPool kickerA;
|
|
|
|
|
|
|
|
late AudioPool kickerB;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
|
|
Future<void> load() async {
|
|
|
|
|
|
|
|
await Future.wait(
|
|
|
|
|
|
|
|
[
|
|
|
|
|
|
|
|
createAudioPool(
|
|
|
|
|
|
|
|
prefixFile(Assets.sfx.kickerA),
|
|
|
|
|
|
|
|
prefix: '',
|
|
|
|
|
|
|
|
).then((pool) => kickerA = pool),
|
|
|
|
|
|
|
|
createAudioPool(
|
|
|
|
|
|
|
|
prefixFile(Assets.sfx.kickerB),
|
|
|
|
|
|
|
|
prefix: '',
|
|
|
|
|
|
|
|
).then((pool) => kickerB = pool),
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
|
|
void play() {
|
|
|
|
|
|
|
|
(seed.nextBool() ? kickerA : kickerB).start(volume: 0.6);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -278,13 +250,19 @@ class PinballAudioPlayer {
|
|
|
|
playSingleAudio: _playSingleAudio,
|
|
|
|
playSingleAudio: _playSingleAudio,
|
|
|
|
path: Assets.sfx.gameOverVoiceOver,
|
|
|
|
path: Assets.sfx.gameOverVoiceOver,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
PinballAudio.bumper: _BumperAudio(
|
|
|
|
PinballAudio.bumper: _RandomABAudio(
|
|
|
|
createAudioPool: _createAudioPool,
|
|
|
|
createAudioPool: _createAudioPool,
|
|
|
|
seed: _seed,
|
|
|
|
seed: _seed,
|
|
|
|
|
|
|
|
audioAssetA: Assets.sfx.bumperA,
|
|
|
|
|
|
|
|
audioAssetB: Assets.sfx.bumperB,
|
|
|
|
|
|
|
|
volume: 0.6,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
PinballAudio.kicker: _KickerAudio(
|
|
|
|
PinballAudio.kicker: _RandomABAudio(
|
|
|
|
createAudioPool: _createAudioPool,
|
|
|
|
createAudioPool: _createAudioPool,
|
|
|
|
seed: _seed,
|
|
|
|
seed: _seed,
|
|
|
|
|
|
|
|
audioAssetA: Assets.sfx.kickerA,
|
|
|
|
|
|
|
|
audioAssetB: Assets.sfx.kickerB,
|
|
|
|
|
|
|
|
volume: 0.6,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
PinballAudio.cowMoo: _ThrottledAudio(
|
|
|
|
PinballAudio.cowMoo: _ThrottledAudio(
|
|
|
|
preCacheSingleAudio: _preCacheSingleAudio,
|
|
|
|
preCacheSingleAudio: _preCacheSingleAudio,
|
|
|
|