diff --git a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart index 6d555651..3dac5496 100644 --- a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart +++ b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart @@ -14,10 +14,9 @@ class MultiballsBehavior extends Component final hasMultiball = state.bonusHistory.contains(GameBonus.dashNest); if (hasMultiball) { - final multiballs = parent.children.whereType(); - for (final multiball in multiballs) { - multiball.bloc.animate(); - } + parent.children.whereType().forEach((multiball) { + multiball.bloc.onAnimate(); + }); } }); } diff --git a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart index 257e0ce0..5adcff35 100644 --- a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart @@ -3,51 +3,53 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; /// {@template multiball_blinking_behavior} -/// Makes a [Multiball] blink back to [MultiballState.lit] when -/// [MultiballState.dimmed]. +/// Makes a [Multiball] blink back to [MultiballLightState.lit] when +/// [MultiballLightState.dimmed]. /// {@endtemplate} class MultiballBlinkingBehavior extends TimerComponent with ParentIsA { /// {@macro multiball_blinking_behavior} - MultiballBlinkingBehavior() : super(period: 0.05); + MultiballBlinkingBehavior() : super(period: 0.5); + + final _maxBlinks = 5; + int _blinkCounter = 0; void _onNewState(MultiballState state) { - switch (state) { - case MultiballState.lit: - break; - case MultiballState.dimmed: + if (state.animationState == MultiballAnimationState.animated) { + _animate(); + if (!timer.isRunning()) { timer ..reset() ..start(); - break; + } + } else { + timer.stop(); + parent.bloc.onStop(); + } + } + + void _animate() { + if (_blinkCounter <= _maxBlinks) { + _blinkCounter++; + print("onBlink"); + parent.bloc.onBlink(); + } else { + print("onStop"); + parent.bloc.onStop(); } } @override Future onLoad() async { await super.onLoad(); - timer.stop(); parent.bloc.stream.listen(_onNewState); } @override void onTick() { super.onTick(); - timer.stop(); - parent.bloc.onBlinked(); + timer + ..reset() + ..start(); } } - -/* -/// Animates the [Multiball]. - Future animate() async { - final spriteGroupComponent = firstChild(); - - for (var i = 0; i < 5; i++) { - spriteGroupComponent?.current = MultiballState.lit; - await Future.delayed(const Duration(milliseconds: 100)); - spriteGroupComponent?.current = MultiballState.dimmed; - await Future.delayed(const Duration(milliseconds: 100)); - } - } - */ \ No newline at end of file diff --git a/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart index b636ddb1..c3dbb013 100644 --- a/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart +++ b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart @@ -21,23 +21,23 @@ void main() { setUp: (game, tester) async { final behavior = MultiballBlinkingBehavior(); final bloc = MockMultiballCubit(); - final streamController = StreamController(); + final streamController = StreamController(); whenListen( bloc, streamController.stream, - initialState: MultiballState.dimmed, + initialState: MultiballLightState.dimmed, ); final multiball = Multiball.test(bloc: bloc); await multiball.add(behavior); await game.ensureAdd(multiball); - streamController.add(MultiballState.lit); + streamController.add(MultiballLightState.lit); await tester.pump(); game.update(0.05); await streamController.close(); - verify(bloc.onBlinked).called(1); + verify(bloc.onDimmed).called(1); }, ); }, diff --git a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart index f60de2d1..61b4cee4 100644 --- a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart +++ b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart @@ -12,14 +12,8 @@ import '../../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ - Assets.images.multiball.a.lit.keyName, - Assets.images.multiball.a.dimmed.keyName, - Assets.images.multiball.b.lit.keyName, - Assets.images.multiball.b.dimmed.keyName, - Assets.images.multiball.c.lit.keyName, - Assets.images.multiball.c.dimmed.keyName, - Assets.images.multiball.d.lit.keyName, - Assets.images.multiball.d.dimmed.keyName, + Assets.images.multiball.lit.keyName, + Assets.images.multiball.dimmed.keyName, ]; group('MultiballsBehavior', () {