diff --git a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart index 80bfc355..8b323ff4 100644 --- a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart +++ b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart @@ -12,9 +12,11 @@ class MultiballsBehavior extends Component BlocComponent { @override bool listenWhen(GameState? previousState, GameState newState) { - final hasMultiball = newState.bonusHistory.contains(GameBonus.dashNest); final hasChanged = previousState?.bonusHistory != newState.bonusHistory; - return hasChanged && hasMultiball; + final lastBonusIsMultiball = newState.bonusHistory.isNotEmpty && + newState.bonusHistory.last == GameBonus.dashNest; + + return hasChanged && lastBonusIsMultiball; } @override 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 aa090a56..25f0b9b6 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 @@ -21,7 +21,6 @@ class MultiballBlinkingBehavior extends Component with ParentIsA { } } - // TODO(ruimiguel): try to improve with TimerComponent? Future _animate() async { if (!_isAnimating) { _isAnimating = true; diff --git a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart index 3aa7443e..97588993 100644 --- a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart +++ b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart @@ -55,9 +55,10 @@ void main() { test( 'is false when the bonusHistory has changed ' 'with a bonus different than GameBonus.dashNest', () { - final previous = GameState.initial(); + final previous = + GameState.initial().copyWith(bonusHistory: [GameBonus.dashNest]); final state = previous.copyWith( - bonusHistory: [GameBonus.androidSpaceship], + bonusHistory: [...previous.bonusHistory, GameBonus.androidSpaceship], ); expect( @@ -67,6 +68,7 @@ void main() { }); test('is false when the bonusHistory state is the same', () { + final previous = GameState.initial(); final state = GameState( score: 10, multiplier: 1, @@ -74,7 +76,6 @@ void main() { bonusHistory: const [], ); - final previous = GameState.initial(); expect( MultiballsBehavior().listenWhen(previous, state), isFalse,