From 8a63b100e88a1dab7ad8a616379c0ef4f9733d27 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Tue, 10 May 2022 08:35:08 -0500 Subject: [PATCH] revert: looping animatronics --- .../flutter_forest_bonus_behavior.dart | 2 ++ .../flutter_forest/flutter_forest.dart | 6 +---- .../sparky_computer_bonus_behavior.dart | 2 ++ .../sparky_scorch/sparky_scorch.dart | 6 +---- .../lib/src/components/dash_animatronic.dart | 8 ++++--- .../src/components/sparky_animatronic.dart | 8 ++++--- .../src/components/dash_animatronic_test.dart | 20 ++++++++++------- .../components/sparky_animatronic_test.dart | 22 ++++++++++++------- .../flutter_forest_bonus_behavior_test.dart | 17 +++++++++----- .../sparky_computer_bonus_behavior_test.dart | 7 ++++-- 10 files changed, 59 insertions(+), 39 deletions(-) diff --git a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart index d13297f0..3c4ef02a 100644 --- a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart +++ b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart @@ -21,6 +21,7 @@ class FlutterForestBonusBehavior extends Component final bumpers = parent.children.whereType(); final signpost = parent.firstChild()!; + final animatronic = parent.firstChild()!; for (final bumper in bumpers) { bumper.bloc.stream.listen((state) { @@ -37,6 +38,7 @@ class FlutterForestBonusBehavior extends Component if (signpost.bloc.isFullyProgressed()) { bloc.add(const BonusActivated(GameBonus.dashNest)); add(BonusBallSpawningBehavior()); + animatronic.playing = true; signpost.bloc.onProgressed(); } } diff --git a/lib/game/components/flutter_forest/flutter_forest.dart b/lib/game/components/flutter_forest/flutter_forest.dart index 57bd24c4..39783bb1 100644 --- a/lib/game/components/flutter_forest/flutter_forest.dart +++ b/lib/game/components/flutter_forest/flutter_forest.dart @@ -40,11 +40,7 @@ class FlutterForest extends Component with ZIndex { BumperNoiseBehavior(), ], )..initialPosition = Vector2(21.8, -46.75), - DashAnimatronic( - children: [ - AnimatronicLoopingBehavior(animationCoolDown: 4), - ], - )..position = Vector2(20, -66), + DashAnimatronic()..position = Vector2(20, -66), FlutterForestBonusBehavior(), ], ) { diff --git a/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart b/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart index 3cd2fc0b..d1b8898e 100644 --- a/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart +++ b/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart @@ -12,11 +12,13 @@ class SparkyComputerBonusBehavior extends Component void onMount() { super.onMount(); final sparkyComputer = parent.firstChild()!; + final animatronic = parent.firstChild()!; sparkyComputer.bloc.stream.listen((state) async { final listenWhen = state == SparkyComputerState.withBall; if (!listenWhen) return; bloc.add(const BonusActivated(GameBonus.sparkyTurboCharge)); + animatronic.playing = true; }); } } diff --git a/lib/game/components/sparky_scorch/sparky_scorch.dart b/lib/game/components/sparky_scorch/sparky_scorch.dart index c7cd71d3..da624361 100644 --- a/lib/game/components/sparky_scorch/sparky_scorch.dart +++ b/lib/game/components/sparky_scorch/sparky_scorch.dart @@ -33,11 +33,7 @@ class SparkyScorch extends Component { BumperNoiseBehavior(), ], )..initialPosition = Vector2(-3.3, -52.55), - SparkyAnimatronic( - children: [ - AnimatronicLoopingBehavior(animationCoolDown: 3), - ], - )..position = Vector2(-14, -58.2), + SparkyAnimatronic()..position = Vector2(-14, -58.2), SparkyComputer( children: [ ScoringContactBehavior(points: Points.twoHundredThousand) diff --git a/packages/pinball_components/lib/src/components/dash_animatronic.dart b/packages/pinball_components/lib/src/components/dash_animatronic.dart index 7202dd09..bb7d983b 100644 --- a/packages/pinball_components/lib/src/components/dash_animatronic.dart +++ b/packages/pinball_components/lib/src/components/dash_animatronic.dart @@ -6,11 +6,10 @@ import 'package:pinball_components/pinball_components.dart'; /// {@endtemplate} class DashAnimatronic extends SpriteAnimationComponent with HasGameRef { /// {@macro dash_animatronic} - DashAnimatronic({Iterable? children}) + DashAnimatronic() : super( anchor: Anchor.center, playing: false, - children: children, ); @override @@ -38,6 +37,9 @@ class DashAnimatronic extends SpriteAnimationComponent with HasGameRef { textureSize: textureSize, loop: false, ), - ); + )..onComplete = () { + animation?.reset(); + playing = false; + }; } } diff --git a/packages/pinball_components/lib/src/components/sparky_animatronic.dart b/packages/pinball_components/lib/src/components/sparky_animatronic.dart index 05a16e47..2ee2803c 100644 --- a/packages/pinball_components/lib/src/components/sparky_animatronic.dart +++ b/packages/pinball_components/lib/src/components/sparky_animatronic.dart @@ -8,11 +8,10 @@ import 'package:pinball_flame/pinball_flame.dart'; class SparkyAnimatronic extends SpriteAnimationComponent with HasGameRef, ZIndex { /// {@macro sparky_animatronic} - SparkyAnimatronic({Iterable? children}) + SparkyAnimatronic() : super( anchor: Anchor.center, playing: false, - children: children, ) { zIndex = ZIndexes.sparkyAnimatronic; } @@ -42,6 +41,9 @@ class SparkyAnimatronic extends SpriteAnimationComponent textureSize: textureSize, loop: false, ), - ); + )..onComplete = () { + animation?.reset(); + playing = false; + }; } } diff --git a/packages/pinball_components/test/src/components/dash_animatronic_test.dart b/packages/pinball_components/test/src/components/dash_animatronic_test.dart index 282e9f8d..059600f0 100644 --- a/packages/pinball_components/test/src/components/dash_animatronic_test.dart +++ b/packages/pinball_components/test/src/components/dash_animatronic_test.dart @@ -56,13 +56,17 @@ void main() { }, ); - flameTester.test('adds new children', (game) async { - final component = Component(); - final dashAnimatronic = DashAnimatronic( - children: [component], - ); - await game.ensureAdd(dashAnimatronic); - expect(dashAnimatronic.children, contains(component)); - }); + flameTester.test( + 'stops animating after animation completes', + (game) async { + final dashAnimatronic = DashAnimatronic(); + await game.ensureAdd(dashAnimatronic); + + dashAnimatronic.playing = true; + game.update(4); + + expect(dashAnimatronic.playing, isFalse); + }, + ); }); } diff --git a/packages/pinball_components/test/src/components/sparky_animatronic_test.dart b/packages/pinball_components/test/src/components/sparky_animatronic_test.dart index 175c9596..7affea67 100644 --- a/packages/pinball_components/test/src/components/sparky_animatronic_test.dart +++ b/packages/pinball_components/test/src/components/sparky_animatronic_test.dart @@ -58,13 +58,19 @@ void main() { }, ); - flameTester.test('adds new children', (game) async { - final component = Component(); - final sparkyAnimatronic = SparkyAnimatronic( - children: [component], - ); - await game.ensureAdd(sparkyAnimatronic); - expect(sparkyAnimatronic.children, contains(component)); - }); + flameTester.test( + 'stops animating after animation completes', + (game) async { + final sparkyAnimatronic = SparkyAnimatronic(); + await game.ensureAdd(sparkyAnimatronic); + + sparkyAnimatronic.playing = true; + final animationDuration = + game.firstChild()!.animation!.totalDuration(); + game.update(animationDuration); + + expect(sparkyAnimatronic.playing, isFalse); + }, + ); }); } diff --git a/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart b/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart index fdef2f39..b6dce582 100644 --- a/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart +++ b/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart @@ -16,7 +16,10 @@ class _TestGame extends Forge2DGame { @override Future onLoad() async { images.prefix = ''; - await images.load(theme.Assets.images.dash.ball.keyName); + await images.loadAll([ + Assets.images.dash.animatronic.keyName, + theme.Assets.images.dash.ball.keyName, + ]); } Future pump( @@ -53,7 +56,7 @@ void main() { void _contactedBumper(DashBumper bumper) => bumper.bloc.onBallContacted(); flameTester.testGameWidget( - 'adds GameBonus.dashNest to the game ' + 'adds GameBonus.dashNest to the game and plays animatronic ' 'when bumpers are activated three times', setUp: (game, tester) async { await game.onLoad(); @@ -64,9 +67,10 @@ void main() { DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()), ]; + final animatronic = DashAnimatronic(); final signpost = Signpost.test(bloc: SignpostCubit()); await game.pump(parent, gameBloc: gameBloc); - await parent.ensureAddAll([...bumpers, signpost]); + await parent.ensureAddAll([...bumpers, animatronic, signpost]); await parent.ensureAdd(behavior); expect(game.descendants().whereType(), equals(bumpers)); @@ -80,6 +84,7 @@ void main() { verify( () => gameBloc.add(const BonusActivated(GameBonus.dashNest)), ).called(1); + expect(animatronic.playing, isTrue); }, ); @@ -95,9 +100,10 @@ void main() { DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()), ]; + final animatronic = DashAnimatronic(); final signpost = Signpost.test(bloc: SignpostCubit()); await game.pump(parent, gameBloc: gameBloc); - await parent.ensureAddAll([...bumpers, signpost]); + await parent.ensureAddAll([...bumpers, animatronic, signpost]); await parent.ensureAdd(behavior); expect(game.descendants().whereType(), equals(bumpers)); @@ -128,9 +134,10 @@ void main() { DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()), ]; + final animatronic = DashAnimatronic(); final signpost = Signpost.test(bloc: SignpostCubit()); await game.pump(parent, gameBloc: gameBloc); - await parent.ensureAddAll([...bumpers, signpost]); + await parent.ensureAddAll([...bumpers, animatronic, signpost]); await parent.ensureAdd(behavior); expect(game.descendants().whereType(), equals(bumpers)); diff --git a/test/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior_test.dart b/test/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior_test.dart index 2dfb54cf..b98c16c2 100644 --- a/test/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior_test.dart +++ b/test/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior_test.dart @@ -17,6 +17,7 @@ class _TestGame extends Forge2DGame { Assets.images.sparky.computer.top.keyName, Assets.images.sparky.computer.base.keyName, Assets.images.sparky.computer.glow.keyName, + Assets.images.sparky.animatronic.keyName, Assets.images.sparky.bumper.a.lit.keyName, Assets.images.sparky.bumper.a.dimmed.keyName, Assets.images.sparky.bumper.b.lit.keyName, @@ -57,14 +58,15 @@ void main() { final flameTester = FlameTester(_TestGame.new); flameTester.testGameWidget( - 'adds GameBonus.sparkyTurboCharge to the game ' + 'adds GameBonus.sparkyTurboCharge to the game and plays animatronic ' 'when SparkyComputerState.withBall is emitted', setUp: (game, tester) async { final behavior = SparkyComputerBonusBehavior(); final parent = SparkyScorch.test(); final sparkyComputer = SparkyComputer(); + final animatronic = SparkyAnimatronic(); - await parent.add(sparkyComputer); + await parent.addAll([sparkyComputer, animatronic]); await game.pump(parent, gameBloc: gameBloc); await parent.ensureAdd(behavior); @@ -74,6 +76,7 @@ void main() { verify( () => gameBloc.add(const BonusActivated(GameBonus.sparkyTurboCharge)), ).called(1); + expect(animatronic.playing, isTrue); }, ); });