diff --git a/lib/game/components/controlled_multiball.dart b/lib/game/components/controlled_multiball.dart index cf36a1a3..6fa24d96 100644 --- a/lib/game/components/controlled_multiball.dart +++ b/lib/game/components/controlled_multiball.dart @@ -11,17 +11,33 @@ import 'package:pinball_flame/pinball_flame.dart'; class MultiballGroup extends Component with Controls, HasGameRef { /// {@macro multiball_group_component} - MultiballGroup() - : super( - children: [ - Multiball.a(), - Multiball.b(), - Multiball.c(), - Multiball.d(), - ], - ) { + MultiballGroup() : super() { controller = MultiballController(this); } + + /// Bottom left multiball. + late final Multiball multiballA; + + /// Center left multiball. + late final Multiball multiballB; + + /// Center right multiball. + late final Multiball multiballC; + + /// Bottom right multiball. + late final Multiball multiballD; + + @override + Future onLoad() async { + await super.onLoad(); + + await addAll([ + multiballA = Multiball.a(), + multiballB = Multiball.b(), + multiballC = Multiball.c(), + multiballD = Multiball.d(), + ]); + } } /// {@template multiball_controller} @@ -44,9 +60,10 @@ class MultiballController extends ComponentController final hasMultiball = state.bonusHistory.contains(GameBonus.dashNest); if (hasMultiball) { - component.children.whereType().forEach((element) { - element.animate(); - }); + component.multiballA.animate(); + component.multiballB.animate(); + component.multiballC.animate(); + component.multiballD.animate(); } } } diff --git a/test/game/components/controlled_multiball_test.dart b/test/game/components/controlled_multiball_test.dart index ad02095e..f748d4ba 100644 --- a/test/game/components/controlled_multiball_test.dart +++ b/test/game/components/controlled_multiball_test.dart @@ -2,6 +2,7 @@ import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -82,7 +83,6 @@ void main() { ); }); - /* group( 'onNewState', () { @@ -90,21 +90,24 @@ void main() { 'blink multiballs when state changes', (game) async { final multiballGroup = MockMultiballGroup(); - final x2multiplier = MockMultiplier(); + final multiball = MockMultiball(); final controller = MultiballController(multiballGroup); - when(() => multiballGroup.x2multiplier).thenReturn(x2multiplier); + when(() => multiballGroup.multiballA).thenReturn(multiball); + when(() => multiballGroup.multiballB).thenReturn(multiball); + when(() => multiballGroup.multiballC).thenReturn(multiball); + when(() => multiballGroup.multiballD).thenReturn(multiball); + when(multiball.animate).thenAnswer((_) async => () {}); controller.onNewState( const GameState.initial() .copyWith(bonusHistory: [GameBonus.dashNest]), ); - verify(() => x2multiplier.toggle(any())).called(1); + verify(() => multiball.animate).called(4); }, ); }, ); - */ }); }); } diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 9b0f67c9..ccf12eca 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -85,3 +85,7 @@ class MockGameFlowController extends Mock implements GameFlowController {} class MockAlienBumper extends Mock implements AlienBumper {} class MockSparkyBumper extends Mock implements SparkyBumper {} + +class MockMultiball extends Mock implements Multiball {} + +class MockMultiballGroup extends Mock implements MultiballGroup {}