refactor: add drain behavior

pull/224/head
Allison Ryan 3 years ago
parent 9151166e33
commit 1b44639057

@ -5,6 +5,7 @@ export 'controlled_ball.dart';
export 'controlled_flipper.dart'; export 'controlled_flipper.dart';
export 'controlled_plunger.dart'; export 'controlled_plunger.dart';
export 'dino_desert.dart'; export 'dino_desert.dart';
export 'drain.dart';
export 'flutter_forest/flutter_forest.dart'; export 'flutter_forest/flutter_forest.dart';
export 'game_flow_controller.dart'; export 'game_flow_controller.dart';
export 'google_word/google_word.dart'; export 'google_word/google_word.dart';

@ -1,15 +1,15 @@
import 'package:flame/extensions.dart'; import 'package:flame/extensions.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
/// {@template drain} /// {@template drain}
/// Area located at the bottom of the board to detect when a [Ball] is lost. /// Area located at the bottom of the board to detect when a [Ball] is lost.
/// {@endtemplate} /// {@endtemplate}
class Drain extends BodyComponent { // TODO(allisonryan0002): move to components package when possible.
class Drain extends BodyComponent with ContactCallbacks {
/// {@macro drain} /// {@macro drain}
Drain() { Drain() : super(renderBody: false);
renderBody = false;
}
@override @override
Body createBody() { Body createBody() {
@ -23,4 +23,12 @@ class Drain extends BodyComponent {
return world.createBody(bodyDef)..createFixture(fixtureDef); 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();
}
} }

@ -10,7 +10,6 @@ export 'chrome_dino.dart';
export 'dash_animatronic.dart'; export 'dash_animatronic.dart';
export 'dash_nest_bumper/dash_nest_bumper.dart'; export 'dash_nest_bumper/dash_nest_bumper.dart';
export 'dino_walls.dart'; export 'dino_walls.dart';
export 'drain.dart';
export 'fire_effect.dart'; export 'fire_effect.dart';
export 'flipper.dart'; export 'flipper.dart';
export 'google_letter/google_letter.dart'; export 'google_letter/google_letter.dart';

@ -16,7 +16,9 @@ void main() {
Assets.images.flipper.left.keyName, Assets.images.flipper.left.keyName,
Assets.images.flipper.right.keyName, Assets.images.flipper.right.keyName,
]; ];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); final flameTester = FlameTester(
() => EmptyPinballTestGame(assets: assets),
);
group('BottomGroup', () { group('BottomGroup', () {
flameTester.test( flameTester.test(

@ -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', () { group('turboCharge', () {
setUpAll(() { setUpAll(() {
registerFallbackValue(Vector2.zero()); registerFallbackValue(Vector2.zero());

@ -3,7 +3,8 @@
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_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'; import '../../helpers/helpers.dart';
@ -41,5 +42,19 @@ void main() {
expect(drain.body.fixtures.first.isSensor, isTrue); 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);
},
);
}); });
} }
Loading…
Cancel
Save