From ffbf47d840ab1e7953264c5cf520fa776a11b976 Mon Sep 17 00:00:00 2001 From: alestiago Date: Wed, 16 Mar 2022 13:26:19 +0000 Subject: [PATCH] feat: made Ball use InitialPosition --- lib/game/components/ball.dart | 11 +++-------- lib/game/pinball_game.dart | 10 ++++++++-- test/game/components/ball_test.dart | 18 +++++++----------- test/game/components/flipper_test.dart | 2 +- 4 files changed, 19 insertions(+), 22 deletions(-) diff --git a/lib/game/components/ball.dart b/lib/game/components/ball.dart index 738ceec6..74b4f3c6 100644 --- a/lib/game/components/ball.dart +++ b/lib/game/components/ball.dart @@ -6,14 +6,9 @@ import 'package:pinball/game/game.dart'; /// A solid, [BodyType.dynamic] sphere that rolls and bounces along the /// [PinballGame]. /// {@endtemplate} -class Ball extends BodyComponent { +class Ball extends BodyComponent with InitialPosition { /// {@macro ball} - Ball({ - required Vector2 position, - }) : _position = position; - - /// The initial position of the [Ball] body. - final Vector2 _position; + Ball(); /// The size of the [Ball] final Vector2 size = Vector2.all(2); @@ -45,7 +40,7 @@ class Ball extends BodyComponent { final bodyDef = BodyDef() ..userData = this - ..position = Vector2(_position.x, _position.y + size.y) + ..position = initialPosition ..type = BodyType.dynamic; return world.createBody(bodyDef)..createFixture(fixtureDef); diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 4985687b..61ef17e0 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -78,7 +78,11 @@ class PinballGame extends Forge2DGame } void spawnBall() { - add(Ball(position: plunger.body.position)); + final ball = Ball(); + add( + ball + ..initialPosition = plunger.body.position + Vector2(0, ball.size.y / 2), + ); } void _addContactCallbacks() { @@ -112,6 +116,8 @@ class DebugPinballGame extends PinballGame with TapDetector { @override void onTapUp(TapUpInfo info) { - add(Ball(position: info.eventPosition.game)); + add( + Ball()..initialPosition = info.eventPosition.game, + ); } } diff --git a/test/game/components/ball_test.dart b/test/game/components/ball_test.dart index e6172d6d..692a83cb 100644 --- a/test/game/components/ball_test.dart +++ b/test/game/components/ball_test.dart @@ -17,7 +17,7 @@ void main() { flameTester.test( 'loads correctly', (game) async { - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.all(0); await game.ready(); await game.ensureAdd(ball); @@ -30,22 +30,18 @@ void main() { 'positions correctly', (game) async { final position = Vector2.all(10); - final ball = Ball(position: position); + final ball = Ball()..initialPosition = position; await game.ensureAdd(ball); game.contains(ball); - final expectedPosition = Vector2( - position.x, - position.y + ball.size.y, - ); - expect(ball.body.position, equals(expectedPosition)); + expect(ball.body.position, equals(position)); }, ); flameTester.test( 'is dynamic', (game) async { - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.all(0); await game.ensureAdd(ball); expect(ball.body.bodyType, equals(BodyType.dynamic)); @@ -57,7 +53,7 @@ void main() { flameTester.test( 'exists', (game) async { - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.all(0); await game.ensureAdd(ball); expect(ball.body.fixtures[0], isA()); @@ -67,7 +63,7 @@ void main() { flameTester.test( 'is dense', (game) async { - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.all(0); await game.ensureAdd(ball); final fixture = ball.body.fixtures[0]; @@ -78,7 +74,7 @@ void main() { flameTester.test( 'shape is circular', (game) async { - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.all(0); await game.ensureAdd(ball); final fixture = ball.body.fixtures[0]; diff --git a/test/game/components/flipper_test.dart b/test/game/components/flipper_test.dart index 87ec505a..bec5b2b2 100644 --- a/test/game/components/flipper_test.dart +++ b/test/game/components/flipper_test.dart @@ -94,7 +94,7 @@ void main() { final flipper = Flipper.fromSide( side: BoardSide.left, )..initialPosition = Vector2.zero(); - final ball = Ball(position: Vector2.zero()); + final ball = Ball()..initialPosition = Vector2.zero(); await game.ready(); await game.ensureAddAll([flipper, ball]);