From 8d17ee8e675c3762a5ed5edefc82bcb7e79d25b0 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Thu, 28 Apr 2022 20:52:38 +0200 Subject: [PATCH] feat: multipliers behavior with multiplier from gamebloc --- .../behaviors/multipliers_behavior.dart | 17 +++++++------ .../behaviors/multipliers_behavior_test.dart | 25 +++++++++++++------ test/helpers/mocks.dart | 2 ++ 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/game/components/multipliers/behaviors/multipliers_behavior.dart b/lib/game/components/multipliers/behaviors/multipliers_behavior.dart index 6912ece8..b3f78dd8 100644 --- a/lib/game/components/multipliers/behaviors/multipliers_behavior.dart +++ b/lib/game/components/multipliers/behaviors/multipliers_behavior.dart @@ -10,16 +10,17 @@ class MultipliersBehavior extends Component void onMount() { super.onMount(); - // TODO(ruimiguel): filter only when multiplier has change, not every other - // state. + var previousMultiplier = 1; + + // TODO(ruimiguel): filter only when multiplier has change. gameRef.read().stream.listen((state) { - final multipliers = parent.children.whereType(); - for (final multiplier in multipliers) { - // TODO(ruimiguel): use here GameState.multiplier when merged - // https://github.com/VGVentures/pinball/pull/213. - final currentMultiplier = state.score.bitLength % 6 + 1; + if (state.multiplier != previousMultiplier) { + previousMultiplier = state.multiplier; - multiplier.bloc.toggle(currentMultiplier); + final multipliers = parent.children.whereType(); + for (final multiplier in multipliers) { + multiplier.bloc.toggle(state.multiplier); + } } }); } diff --git a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart index 1e43eeff..43f0d1ee 100644 --- a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart +++ b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart @@ -49,10 +49,24 @@ void main() { flameBlocTester.testGameWidget( 'calls toggle once per each multiplier when GameBloc emit state', setUp: (game, tester) async { + final multiplierCubit = MockMultiplierCubit(); final behavior = MultipliersBehavior(); final parent = Multipliers.test(); - final multiplier = MockMultiplier(); - final multipliers = [multiplier]; + final multipliers = [ + Multiplier.test( + value: MultiplierValue.x2, + bloc: multiplierCubit, + ), + ]; + + whenListen( + multiplierCubit, + const Stream.empty(), + initialState: MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.dimmed, + ), + ); final streamController = StreamController(); whenListen( @@ -60,18 +74,13 @@ void main() { streamController.stream, initialState: GameState.initial(), ); - when(() => multiplier.addToParent(any())) - .thenAnswer((_) async => () {}); await parent.addAll(multipliers); await game.ensureAdd(parent); await parent.ensureAdd(behavior); - await tester.pump(); - - streamController.add(GameState.initial().copyWith(score: 100)); + streamController.add(GameState.initial().copyWith(multiplier: 2)); - await game.ready(); await tester.pump(); for (final multiplier in multipliers) { diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index af52a0a7..0ca8ddd0 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -91,3 +91,5 @@ class MockSparkyBumper extends Mock implements SparkyBumper {} class MockMultiplier extends Mock implements Multiplier {} class MockMultipliersGroup extends Mock implements Multipliers {} + +class MockMultiplierCubit extends Mock implements MultiplierCubit {}