pull/449/head
Erick Zanardo 3 years ago
parent b1c01cfc7e
commit 6372674eb8

@ -151,7 +151,7 @@ class _SingleLoopAudio extends _LoopAudio {
} }
class _SingleAudioPool extends _Audio { class _SingleAudioPool extends _Audio {
_SingleAudioPoll({ _SingleAudioPool({
required this.path, required this.path,
required this.createAudioPool, required this.createAudioPool,
required this.maxPlayers, required this.maxPlayers,
@ -307,7 +307,7 @@ class PinballAudioPlayer {
path: Assets.sfx.rollover, path: Assets.sfx.rollover,
volume: 0.3, volume: 0.3,
), ),
PinballAudio.flipper: _SingleAudioPoll( PinballAudio.flipper: _SingleAudioPool(
path: Assets.sfx.flipper, path: Assets.sfx.flipper,
createAudioPool: _createAudioPool, createAudioPool: _createAudioPool,
maxPlayers: 2, maxPlayers: 2,

@ -357,7 +357,7 @@ void main() {
).thenAnswer((_) async => pool); ).thenAnswer((_) async => pool);
}); });
test('plays the bumper A sound pool', () async { test('plays the flipper sound pool', () async {
when(seed.nextBool).thenReturn(true); when(seed.nextBool).thenReturn(true);
await Future.wait( await Future.wait(
audioPlayer.load().map((loadableBuilder) => loadableBuilder()), audioPlayer.load().map((loadableBuilder) => loadableBuilder()),

@ -1,3 +1,4 @@
export 'flipper_jointing_behavior.dart'; export 'flipper_jointing_behavior.dart';
export 'flipper_key_controlling_behavior.dart'; export 'flipper_key_controlling_behavior.dart';
export 'flipper_moving_behavior.dart'; export 'flipper_moving_behavior.dart';
export 'flipper_noise_behavior.dart';

@ -27,9 +27,6 @@ class FlipperMovingBehavior extends Component
void onNewState(FlipperState state) { void onNewState(FlipperState state) {
super.onNewState(state); super.onNewState(state);
if (bloc.state.isMovingDown) _moveDown(); if (bloc.state.isMovingDown) _moveDown();
if (bloc.state.isMovingUp) {
readProvider<PinballAudioPlayer>().play(PinballAudio.flipper);
}
} }
@override @override

@ -0,0 +1,18 @@
import 'package:flame/components.dart';
import 'package:flame_bloc/flame_bloc.dart';
import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
class FlipperNoiseBehavior extends Component
with
FlameBlocListenable<FlipperCubit, FlipperState>,
FlameBlocReader<FlipperCubit, FlipperState> {
@override
void onNewState(FlipperState state) {
super.onNewState(state);
if (bloc.state.isMovingUp) {
readProvider<PinballAudioPlayer>().play(PinballAudio.flipper);
}
}
}

@ -25,7 +25,10 @@ class Flipper extends BodyComponent with KeyboardHandler, InitialPosition {
FlipperJointingBehavior(), FlipperJointingBehavior(),
FlameBlocProvider<FlipperCubit, FlipperState>( FlameBlocProvider<FlipperCubit, FlipperState>(
create: FlipperCubit.new, create: FlipperCubit.new,
children: [FlipperMovingBehavior(strength: 90)], children: [
FlipperMovingBehavior(strength: 90),
FlipperNoiseBehavior(),
],
), ),
], ],
); );

@ -10,7 +10,6 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
class _TestGame extends Forge2DGame { class _TestGame extends Forge2DGame {
Future<void> pump( Future<void> pump(
@ -19,14 +18,7 @@ class _TestGame extends Forge2DGame {
PinballAudioPlayer? audioPlayer, PinballAudioPlayer? audioPlayer,
}) async { }) async {
final flipper = Flipper.test(side: BoardSide.left); final flipper = Flipper.test(side: BoardSide.left);
await ensureAdd( await ensureAdd(flipper);
FlameProvider<PinballAudioPlayer>.value(
audioPlayer ?? _MockPinballAudioPlayer(),
children: [
flipper,
],
),
);
await flipper.ensureAdd( await flipper.ensureAdd(
FlameBlocProvider<FlipperCubit, FlipperState>.value( FlameBlocProvider<FlipperCubit, FlipperState>.value(
value: flipperBloc ?? FlipperCubit(), value: flipperBloc ?? FlipperCubit(),
@ -36,8 +28,6 @@ class _TestGame extends Forge2DGame {
} }
} }
class _MockPinballAudioPlayer extends Mock implements PinballAudioPlayer {}
class _MockFlipperCubit extends Mock implements FlipperCubit {} class _MockFlipperCubit extends Mock implements FlipperCubit {}
void main() { void main() {
@ -109,30 +99,5 @@ void main() {
expect(flipper.body.linearVelocity.y, -strength); expect(flipper.body.linearVelocity.y, -strength);
}, },
); );
flameTester.test(
'plays the flipper sound when moving up',
(game) async {
final audioPlayer = _MockPinballAudioPlayer();
final bloc = _MockFlipperCubit();
whenListen(
bloc,
Stream.fromIterable([FlipperState.movingUp]),
initialState: FlipperState.movingUp,
);
const strength = 10.0;
final behavior = FlipperMovingBehavior(strength: strength);
await game.pump(
behavior,
flipperBloc: bloc,
audioPlayer: audioPlayer,
);
behavior.onNewState(FlipperState.movingUp);
game.update(0);
verify(() => audioPlayer.play(PinballAudio.flipper)).called(1);
},
);
}); });
} }

@ -0,0 +1,79 @@
// ignore_for_file: avoid_dynamic_calls, cascade_invocations
import 'dart:async';
import 'package:bloc_test/bloc_test.dart';
import 'package:flame_bloc/flame_bloc.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
class _TestGame extends Forge2DGame {
Future<void> pump(
FlipperNoiseBehavior behavior, {
FlipperCubit? flipperBloc,
PinballAudioPlayer? audioPlayer,
}) async {
final flipper = Flipper.test(side: BoardSide.left);
await ensureAdd(
FlameProvider<PinballAudioPlayer>.value(
audioPlayer ?? _MockPinballAudioPlayer(),
children: [
flipper,
],
),
);
await flipper.ensureAdd(
FlameBlocProvider<FlipperCubit, FlipperState>.value(
value: flipperBloc ?? FlipperCubit(),
children: [behavior],
),
);
}
}
class _MockPinballAudioPlayer extends Mock implements PinballAudioPlayer {}
class _MockFlipperCubit extends Mock implements FlipperCubit {}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(_TestGame.new);
group('FlipperNoiseBehavior', () {
test('can be instantiated', () {
expect(
FlipperNoiseBehavior(),
isA<FlipperNoiseBehavior>(),
);
});
flameTester.test(
'plays the flipper sound when moving up',
(game) async {
final audioPlayer = _MockPinballAudioPlayer();
final bloc = _MockFlipperCubit();
whenListen(
bloc,
Stream.fromIterable([FlipperState.movingUp]),
initialState: FlipperState.movingUp,
);
final behavior = FlipperNoiseBehavior();
await game.pump(
behavior,
flipperBloc: bloc,
audioPlayer: audioPlayer,
);
behavior.onNewState(FlipperState.movingUp);
game.update(0);
verify(() => audioPlayer.play(PinballAudio.flipper)).called(1);
},
);
});
}
Loading…
Cancel
Save