refactor: modified blinking behavior

pull/235/head
RuiAlonso 3 years ago
parent 83e9447600
commit 3b87e3c948

@ -9,7 +9,7 @@ import 'package:pinball_flame/pinball_flame.dart';
class MultiballBlinkingBehavior extends TimerComponent class MultiballBlinkingBehavior extends TimerComponent
with ParentIsA<Multiball> { with ParentIsA<Multiball> {
/// {@macro multiball_blinking_behavior} /// {@macro multiball_blinking_behavior}
MultiballBlinkingBehavior() : super(period: 0.01); MultiballBlinkingBehavior() : super(period: 0.1);
final _maxBlinks = 10; final _maxBlinks = 10;
int _blinksCounter = 0; int _blinksCounter = 0;
@ -19,20 +19,28 @@ class MultiballBlinkingBehavior extends TimerComponent
final animationEnabled = final animationEnabled =
state.animationState == MultiballAnimationState.animated; state.animationState == MultiballAnimationState.animated;
final canBlink = _blinksCounter < _maxBlinks; final canBlink = _blinksCounter < _maxBlinks;
if (animationEnabled && canBlink) { if (animationEnabled && canBlink) {
_animate(); _start();
} else { } else {
_stop(); _stop();
} }
} }
Future<void> _animate() async { void _start() {
if (!_isAnimating) { if (!_isAnimating) {
_isAnimating = true; _isAnimating = true;
timer
..reset()
..start();
_animate();
}
}
void _animate() {
parent.bloc.onBlink(); parent.bloc.onBlink();
_blinksCounter++; _blinksCounter++;
} }
}
void _stop() { void _stop() {
if (_isAnimating) { if (_isAnimating) {
@ -46,14 +54,17 @@ class MultiballBlinkingBehavior extends TimerComponent
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
timer.stop();
parent.bloc.stream.listen(_onNewState); parent.bloc.stream.listen(_onNewState);
} }
@override @override
void onTick() { void onTick() {
super.onTick(); super.onTick();
if (_isAnimating) { if (!_isAnimating) {
timer.stop();
} else {
if (_blinksCounter < _maxBlinks) {
_animate();
timer timer
..reset() ..reset()
..start(); ..start();
@ -62,3 +73,4 @@ class MultiballBlinkingBehavior extends TimerComponent
} }
} }
} }
}

@ -40,6 +40,11 @@ void main() {
lightState: MultiballLightState.lit, lightState: MultiballLightState.lit,
), ),
); );
await tester.pump();
game.update(0);
verify(bloc.onBlink).called(1);
await tester.pump(); await tester.pump();
game.update(0.1); game.update(0.1);

Loading…
Cancel
Save