refactor: changing blink behavior

pull/235/head
RuiAlonso 3 years ago
parent 93eca06a15
commit 30f8e6b16e

@ -14,10 +14,9 @@ class MultiballsBehavior extends Component
final hasMultiball = state.bonusHistory.contains(GameBonus.dashNest); final hasMultiball = state.bonusHistory.contains(GameBonus.dashNest);
if (hasMultiball) { if (hasMultiball) {
final multiballs = parent.children.whereType<Multiball>(); parent.children.whereType<Multiball>().forEach((multiball) {
for (final multiball in multiballs) { multiball.bloc.onAnimate();
multiball.bloc.animate(); });
}
} }
}); });
} }

@ -3,51 +3,53 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
/// {@template multiball_blinking_behavior} /// {@template multiball_blinking_behavior}
/// Makes a [Multiball] blink back to [MultiballState.lit] when /// Makes a [Multiball] blink back to [MultiballLightState.lit] when
/// [MultiballState.dimmed]. /// [MultiballLightState.dimmed].
/// {@endtemplate} /// {@endtemplate}
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.05); MultiballBlinkingBehavior() : super(period: 0.5);
final _maxBlinks = 5;
int _blinkCounter = 0;
void _onNewState(MultiballState state) { void _onNewState(MultiballState state) {
switch (state) { if (state.animationState == MultiballAnimationState.animated) {
case MultiballState.lit: _animate();
break; if (!timer.isRunning()) {
case MultiballState.dimmed:
timer timer
..reset() ..reset()
..start(); ..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 @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();
timer.stop(); timer
parent.bloc.onBlinked(); ..reset()
..start();
} }
} }
/*
/// Animates the [Multiball].
Future<void> animate() async {
final spriteGroupComponent = firstChild<MultiballSpriteGroupComponent>();
for (var i = 0; i < 5; i++) {
spriteGroupComponent?.current = MultiballState.lit;
await Future<void>.delayed(const Duration(milliseconds: 100));
spriteGroupComponent?.current = MultiballState.dimmed;
await Future<void>.delayed(const Duration(milliseconds: 100));
}
}
*/

@ -21,23 +21,23 @@ void main() {
setUp: (game, tester) async { setUp: (game, tester) async {
final behavior = MultiballBlinkingBehavior(); final behavior = MultiballBlinkingBehavior();
final bloc = MockMultiballCubit(); final bloc = MockMultiballCubit();
final streamController = StreamController<MultiballState>(); final streamController = StreamController<MultiballLightState>();
whenListen( whenListen(
bloc, bloc,
streamController.stream, streamController.stream,
initialState: MultiballState.dimmed, initialState: MultiballLightState.dimmed,
); );
final multiball = Multiball.test(bloc: bloc); final multiball = Multiball.test(bloc: bloc);
await multiball.add(behavior); await multiball.add(behavior);
await game.ensureAdd(multiball); await game.ensureAdd(multiball);
streamController.add(MultiballState.lit); streamController.add(MultiballLightState.lit);
await tester.pump(); await tester.pump();
game.update(0.05); game.update(0.05);
await streamController.close(); await streamController.close();
verify(bloc.onBlinked).called(1); verify(bloc.onDimmed).called(1);
}, },
); );
}, },

@ -12,14 +12,8 @@ import '../../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.multiball.a.lit.keyName, Assets.images.multiball.lit.keyName,
Assets.images.multiball.a.dimmed.keyName, Assets.images.multiball.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,
]; ];
group('MultiballsBehavior', () { group('MultiballsBehavior', () {

Loading…
Cancel
Save