diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index 23a03404..b9ea85ea 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -59,8 +59,7 @@ class _BottomGroupSide extends Component { final flipper = Flipper.fromSide( side: _side, - position: _position, - ); + )..initialPosition = _position; final baseboard = Baseboard(side: _side) ..initialPosition = _position + Vector2( diff --git a/lib/game/components/flipper.dart b/lib/game/components/flipper.dart index 82493a0c..dd626d1b 100644 --- a/lib/game/components/flipper.dart +++ b/lib/game/components/flipper.dart @@ -13,19 +13,15 @@ import 'package:pinball/game/game.dart'; /// /// [Flipper] can be controlled by the player in an arc motion. /// {@endtemplate flipper} -class Flipper extends BodyComponent with KeyboardHandler { +class Flipper extends BodyComponent with KeyboardHandler, InitialPosition { /// {@macro flipper} Flipper._({ - required Vector2 position, required this.side, required List keys, - }) : _position = position, - _keys = keys; + }) : _keys = keys; - Flipper._left({ - required Vector2 position, - }) : this._( - position: position, + Flipper._left() + : this._( side: BoardSide.left, keys: [ LogicalKeyboardKey.arrowLeft, @@ -33,10 +29,8 @@ class Flipper extends BodyComponent with KeyboardHandler { ], ); - Flipper._right({ - required Vector2 position, - }) : this._( - position: position, + Flipper._right() + : this._( side: BoardSide.right, keys: [ LogicalKeyboardKey.arrowRight, @@ -50,13 +44,12 @@ class Flipper extends BodyComponent with KeyboardHandler { /// horizontally, also have different [LogicalKeyboardKey]s that control them. factory Flipper.fromSide({ required BoardSide side, - required Vector2 position, }) { switch (side) { case BoardSide.left: - return Flipper._left(position: position); + return Flipper._left(); case BoardSide.right: - return Flipper._right(position: position); + return Flipper._right(); } } @@ -82,9 +75,6 @@ class Flipper extends BodyComponent with KeyboardHandler { /// whereas a [Flipper] with [BoardSide.right] has a clockwise arc motion. final BoardSide side; - /// The initial position of the [Flipper] body. - final Vector2 _position; - /// The [LogicalKeyboardKey]s that will control the [Flipper]. /// /// [onKeyEvent] method listens to when one of these keys is pressed. @@ -201,7 +191,7 @@ class Flipper extends BodyComponent with KeyboardHandler { final bodyDef = BodyDef() ..gravityScale = 0 ..type = BodyType.dynamic - ..position = _position; + ..position = initialPosition; final body = world.createBody(bodyDef); _createFixtureDefs().forEach(body.createFixture); diff --git a/test/game/components/flipper_test.dart b/test/game/components/flipper_test.dart index eae238c9..87ec505a 100644 --- a/test/game/components/flipper_test.dart +++ b/test/game/components/flipper_test.dart @@ -22,12 +22,10 @@ void main() { (game) async { final leftFlipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); final rightFlipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ready(); await game.ensureAddAll([leftFlipper, rightFlipper]); @@ -40,15 +38,13 @@ void main() { test('sets BoardSide', () { final leftFlipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); expect(leftFlipper.side, equals(leftFlipper.side)); final rightFlipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); expect(rightFlipper.side, equals(rightFlipper.side)); }); }); @@ -60,8 +56,7 @@ void main() { final position = Vector2.all(10); final flipper = Flipper.fromSide( side: BoardSide.left, - position: position, - ); + )..initialPosition = position; await game.ensureAdd(flipper); game.contains(flipper); @@ -74,8 +69,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); expect(flipper.body.bodyType, equals(BodyType.dynamic)); @@ -87,8 +81,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); expect(flipper.body.gravityScale, isZero); @@ -100,8 +93,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); final ball = Ball(position: Vector2.zero()); await game.ready(); @@ -121,8 +113,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); expect(flipper.body.fixtures.length, equals(3)); @@ -134,8 +125,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final fixtures = flipper.body.fixtures; @@ -165,8 +155,7 @@ void main() { setUp(() { flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); }); testRawKeyDownEvents(leftKeys, (event) { @@ -232,8 +221,7 @@ void main() { setUp(() { flipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); }); testRawKeyDownEvents(rightKeys, (event) { @@ -302,8 +290,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -318,8 +305,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -337,8 +323,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -359,8 +344,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -380,8 +364,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -406,8 +389,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.left, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -433,8 +415,7 @@ void main() { (game) async { final flipper = Flipper.fromSide( side: BoardSide.right, - position: Vector2.zero(), - ); + )..initialPosition = Vector2.zero(); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper);