From 3b87e3c94893b4928f09f2bbc6905ae838f09d47 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Sat, 30 Apr 2022 17:48:46 +0200 Subject: [PATCH] refactor: modified blinking behavior --- .../multiball_blinking_behavior.dart | 34 +++++++++++++------ .../multiball_blinking_behavior_test.dart | 5 +++ 2 files changed, 28 insertions(+), 11 deletions(-) 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 61b30815..fbea7f22 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 @@ -9,7 +9,7 @@ import 'package:pinball_flame/pinball_flame.dart'; class MultiballBlinkingBehavior extends TimerComponent with ParentIsA { /// {@macro multiball_blinking_behavior} - MultiballBlinkingBehavior() : super(period: 0.01); + MultiballBlinkingBehavior() : super(period: 0.1); final _maxBlinks = 10; int _blinksCounter = 0; @@ -19,21 +19,29 @@ class MultiballBlinkingBehavior extends TimerComponent final animationEnabled = state.animationState == MultiballAnimationState.animated; final canBlink = _blinksCounter < _maxBlinks; + if (animationEnabled && canBlink) { - _animate(); + _start(); } else { _stop(); } } - Future _animate() async { + void _start() { if (!_isAnimating) { _isAnimating = true; - parent.bloc.onBlink(); - _blinksCounter++; + timer + ..reset() + ..start(); + _animate(); } } + void _animate() { + parent.bloc.onBlink(); + _blinksCounter++; + } + void _stop() { if (_isAnimating) { _isAnimating = false; @@ -46,19 +54,23 @@ class MultiballBlinkingBehavior extends TimerComponent @override Future onLoad() async { await super.onLoad(); - timer.stop(); parent.bloc.stream.listen(_onNewState); } @override void onTick() { super.onTick(); - if (_isAnimating) { - timer - ..reset() - ..start(); - } else { + if (!_isAnimating) { timer.stop(); + } else { + if (_blinksCounter < _maxBlinks) { + _animate(); + timer + ..reset() + ..start(); + } else { + timer.stop(); + } } } } 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 9d09658b..5a0910d0 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 @@ -40,6 +40,11 @@ void main() { lightState: MultiballLightState.lit, ), ); + await tester.pump(); + game.update(0); + + verify(bloc.onBlink).called(1); + await tester.pump(); game.update(0.1);