diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 6f4a0c81..62005d04 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -19,8 +19,6 @@ class PinballGame extends Forge2DGame final PinballTheme theme; - late final Plunger plunger; - @override void onAttach() { super.onAttach(); @@ -75,7 +73,7 @@ class PinballGame extends Forge2DGame } Future _addPlunger() async { - plunger = Plunger(compressionDistance: 29) + final plunger = Plunger(compressionDistance: 29) ..initialPosition = BoardDimensions.bounds.center.toVector2() + Vector2(41.5, -49); await add(plunger); @@ -98,6 +96,10 @@ class PinballGame extends Forge2DGame } void spawnBall() { + // TODO(alestiago): Remove once this logic is moved to controller. + final plunger = firstChild(); + if (plunger == null) return; + final ball = ControlledBall.launch( theme: theme, )..initialPosition = Vector2( diff --git a/test/game/components/flutter_forest_test.dart b/test/game/components/flutter_forest_test.dart index 33dbb991..da3f4fee 100644 --- a/test/game/components/flutter_forest_test.dart +++ b/test/game/components/flutter_forest_test.dart @@ -25,7 +25,7 @@ void beginContact(Forge2DGame game, BodyComponent bodyA, BodyComponent bodyB) { void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballGameTest.create); + final flameTester = FlameTester(EmptyPinballGame.create); group('FlutterForest', () { flameTester.test( @@ -146,16 +146,15 @@ void main() { }); final flameBlocTester = FlameBlocTester( - gameBuilder: PinballGameTest.create, + gameBuilder: EmptyPinballGame.create, blocBuilder: () => gameBloc, ); flameBlocTester.testGameWidget( 'add DashNestActivated event', setUp: (game, tester) async { - await game.ready(); - final flutterForest = - game.descendants().whereType().first; + final flutterForest = FlutterForest(); + await game.ensureAdd(flutterForest); await game.ensureAdd(ball); final bumpers = @@ -177,15 +176,16 @@ void main() { final flutterForest = FlutterForest(); await game.ensureAdd(flutterForest); await game.ensureAdd(ball); + game.addContactCallback(BallScorePointsCallback(game)); - final bumpers = - flutterForest.descendants().whereType(); + final bumpers = flutterForest.descendants().whereType(); for (final bumper in bumpers) { beginContact(game, bumper, ball); - final points = (bumper as ScorePoints).points; verify( - () => gameBloc.add(Scored(points: points)), + () => gameBloc.add( + Scored(points: bumper.points), + ), ).called(1); } }, diff --git a/test/helpers/extensions.dart b/test/helpers/extensions.dart index b3c4c6f8..4842bc7f 100644 --- a/test/helpers/extensions.dart +++ b/test/helpers/extensions.dart @@ -1,3 +1,4 @@ +import 'package:flutter/services.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_theme/pinball_theme.dart'; @@ -20,3 +21,16 @@ extension DebugPinballGameTest on DebugPinballGame { ), ); } + +class EmptyPinballGame extends PinballGame { + EmptyPinballGame({required PinballTheme theme}) : super(theme: theme); + + @override + Future onLoad() async {} + + static PinballGame create() => EmptyPinballGame( + theme: const PinballTheme( + characterTheme: DashTheme(), + ), + ); +}