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);
if (hasMultiball) {
final multiballs = parent.children.whereType<Multiball>();
for (final multiball in multiballs) {
multiball.bloc.animate();
}
parent.children.whereType<Multiball>().forEach((multiball) {
multiball.bloc.onAnimate();
});
}
});
}

@ -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<Multiball> {
/// {@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<void> onLoad() async {
await super.onLoad();
timer.stop();
parent.bloc.stream.listen(_onNewState);
}
@override
void onTick() {
super.onTick();
timer.stop();
parent.bloc.onBlinked();
}
}
/*
/// 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));
timer
..reset()
..start();
}
}
*/

@ -21,23 +21,23 @@ void main() {
setUp: (game, tester) async {
final behavior = MultiballBlinkingBehavior();
final bloc = MockMultiballCubit();
final streamController = StreamController<MultiballState>();
final streamController = StreamController<MultiballLightState>();
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);
},
);
},

@ -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', () {

Loading…
Cancel
Save