feat: multipliers behavior with multiplier from gamebloc

pull/231/head
RuiAlonso 3 years ago
parent 0440ce5eac
commit 8d17ee8e67

@ -10,16 +10,17 @@ class MultipliersBehavior extends Component
void onMount() { void onMount() {
super.onMount(); super.onMount();
// TODO(ruimiguel): filter only when multiplier has change, not every other var previousMultiplier = 1;
// state.
// TODO(ruimiguel): filter only when multiplier has change.
gameRef.read<GameBloc>().stream.listen((state) { gameRef.read<GameBloc>().stream.listen((state) {
final multipliers = parent.children.whereType<Multiplier>(); if (state.multiplier != previousMultiplier) {
for (final multiplier in multipliers) { previousMultiplier = state.multiplier;
// TODO(ruimiguel): use here GameState.multiplier when merged
// https://github.com/VGVentures/pinball/pull/213.
final currentMultiplier = state.score.bitLength % 6 + 1;
multiplier.bloc.toggle(currentMultiplier); final multipliers = parent.children.whereType<Multiplier>();
for (final multiplier in multipliers) {
multiplier.bloc.toggle(state.multiplier);
}
} }
}); });
} }

@ -49,10 +49,24 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'calls toggle once per each multiplier when GameBloc emit state', 'calls toggle once per each multiplier when GameBloc emit state',
setUp: (game, tester) async { setUp: (game, tester) async {
final multiplierCubit = MockMultiplierCubit();
final behavior = MultipliersBehavior(); final behavior = MultipliersBehavior();
final parent = Multipliers.test(); final parent = Multipliers.test();
final multiplier = MockMultiplier(); final multipliers = [
final multipliers = [multiplier]; Multiplier.test(
value: MultiplierValue.x2,
bloc: multiplierCubit,
),
];
whenListen(
multiplierCubit,
const Stream<MultiplierState>.empty(),
initialState: MultiplierState(
value: MultiplierValue.x2,
spriteState: MultiplierSpriteState.dimmed,
),
);
final streamController = StreamController<GameState>(); final streamController = StreamController<GameState>();
whenListen( whenListen(
@ -60,18 +74,13 @@ void main() {
streamController.stream, streamController.stream,
initialState: GameState.initial(), initialState: GameState.initial(),
); );
when(() => multiplier.addToParent(any()))
.thenAnswer((_) async => () {});
await parent.addAll(multipliers); await parent.addAll(multipliers);
await game.ensureAdd(parent); await game.ensureAdd(parent);
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
await tester.pump(); streamController.add(GameState.initial().copyWith(multiplier: 2));
streamController.add(GameState.initial().copyWith(score: 100));
await game.ready();
await tester.pump(); await tester.pump();
for (final multiplier in multipliers) { for (final multiplier in multipliers) {

@ -91,3 +91,5 @@ class MockSparkyBumper extends Mock implements SparkyBumper {}
class MockMultiplier extends Mock implements Multiplier {} class MockMultiplier extends Mock implements Multiplier {}
class MockMultipliersGroup extends Mock implements Multipliers {} class MockMultipliersGroup extends Mock implements Multipliers {}
class MockMultiplierCubit extends Mock implements MultiplierCubit {}

Loading…
Cancel
Save