diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 12a66c96..f1b92f4d 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -5,6 +5,7 @@ export 'controlled_ball.dart'; export 'controlled_flipper.dart'; export 'controlled_plunger.dart'; export 'dino_desert.dart'; +export 'drain.dart'; export 'flutter_forest/flutter_forest.dart'; export 'game_flow_controller.dart'; export 'google_word/google_word.dart'; diff --git a/packages/pinball_components/lib/src/components/drain.dart b/lib/game/components/drain.dart similarity index 59% rename from packages/pinball_components/lib/src/components/drain.dart rename to lib/game/components/drain.dart index 3a425323..1dc3e211 100644 --- a/packages/pinball_components/lib/src/components/drain.dart +++ b/lib/game/components/drain.dart @@ -1,15 +1,15 @@ import 'package:flame/extensions.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; /// {@template drain} /// Area located at the bottom of the board to detect when a [Ball] is lost. /// {@endtemplate} -class Drain extends BodyComponent { +// TODO(allisonryan0002): move to components package when possible. +class Drain extends BodyComponent with ContactCallbacks { /// {@macro drain} - Drain() { - renderBody = false; - } + Drain() : super(renderBody: false); @override Body createBody() { @@ -23,4 +23,12 @@ class Drain extends BodyComponent { return world.createBody(bodyDef)..createFixture(fixtureDef); } + +// TODO(allisonryan0002): move this to ball.dart when BallLost is removed. + @override + void beginContact(Object other, Contact contact) { + super.beginContact(other, contact); + if (other is! ControlledBall) return; + other.controller.lost(); + } } diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index 7c7bd41e..5d6f5744 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -10,7 +10,6 @@ export 'chrome_dino.dart'; export 'dash_animatronic.dart'; export 'dash_nest_bumper/dash_nest_bumper.dart'; export 'dino_walls.dart'; -export 'drain.dart'; export 'fire_effect.dart'; export 'flipper.dart'; export 'google_letter/google_letter.dart'; diff --git a/test/game/components/bottom_group_test.dart b/test/game/components/bottom_group_test.dart index 378166b7..fed9a7c9 100644 --- a/test/game/components/bottom_group_test.dart +++ b/test/game/components/bottom_group_test.dart @@ -16,7 +16,9 @@ void main() { Assets.images.flipper.left.keyName, Assets.images.flipper.right.keyName, ]; - final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); + final flameTester = FlameTester( + () => EmptyPinballTestGame(assets: assets), + ); group('BottomGroup', () { flameTester.test( diff --git a/test/game/components/controlled_ball_test.dart b/test/game/components/controlled_ball_test.dart index 3a4889a2..e615d508 100644 --- a/test/game/components/controlled_ball_test.dart +++ b/test/game/components/controlled_ball_test.dart @@ -66,21 +66,6 @@ void main() { }, ); - flameBlocTester.testGameWidget( - 'DrainBallContactCallback calls lost', - setUp: (game, tester) async { - final contactCallback = DrainBallContactCallback(); - final ball = MockControlledBall(); - final drain = MockDrain(); - final controller = MockBallController(); - when(() => ball.controller).thenReturn(controller); - - contactCallback.begin(ball, drain, MockContact()); - - verify(() => ball.controller.lost()).called(1); - }, - ); - group('turboCharge', () { setUpAll(() { registerFallbackValue(Vector2.zero()); diff --git a/packages/pinball_components/test/src/components/drain_test.dart b/test/game/components/drain_test.dart similarity index 69% rename from packages/pinball_components/test/src/components/drain_test.dart rename to test/game/components/drain_test.dart index 080d3f51..f1875a56 100644 --- a/packages/pinball_components/test/src/components/drain_test.dart +++ b/test/game/components/drain_test.dart @@ -3,7 +3,8 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball_components/pinball_components.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:pinball/game/game.dart'; import '../../helpers/helpers.dart'; @@ -41,5 +42,19 @@ void main() { expect(drain.body.fixtures.first.isSensor, isTrue); }, ); + + test( + 'calls lost on contact with ball', + () async { + final drain = Drain(); + final ball = MockControlledBall(); + final controller = MockBallController(); + when(() => ball.controller).thenReturn(controller); + + drain.beginContact(ball, MockContact()); + + verify(controller.lost).called(1); + }, + ); }); }