diff --git a/lib/game/components/flipper.dart b/lib/game/components/flipper.dart index 6ec0cb49..53e3666c 100644 --- a/lib/game/components/flipper.dart +++ b/lib/game/components/flipper.dart @@ -22,8 +22,7 @@ class Flipper extends BodyComponent with KeyboardHandler { }) : _position = position, _keys = keys; - /// A left positioned [Flipper]. - Flipper.left({ + Flipper._left({ required Vector2 position, }) : this._( position: position, @@ -34,8 +33,7 @@ class Flipper extends BodyComponent with KeyboardHandler { ], ); - /// A right positioned [Flipper]. - Flipper.right({ + Flipper._right({ required Vector2 position, }) : this._( position: position, @@ -46,15 +44,20 @@ class Flipper extends BodyComponent with KeyboardHandler { ], ); + /// Constructs a [Flipper] from a [BoardSide]. + /// + /// A [Flipper._right] and [Flipper._left] besides being mirrored + /// horizontally, they 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(position: position); case BoardSide.right: - return Flipper.right(position: position); + return Flipper._right(position: position); } } diff --git a/test/game/components/flipper_test.dart b/test/game/components/flipper_test.dart index df606178..eae238c9 100644 --- a/test/game/components/flipper_test.dart +++ b/test/game/components/flipper_test.dart @@ -20,8 +20,14 @@ void main() { flameTester.test( 'loads correctly', (game) async { - final leftFlipper = Flipper.left(position: Vector2.zero()); - final rightFlipper = Flipper.right(position: Vector2.zero()); + final leftFlipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); + final rightFlipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); await game.ready(); await game.ensureAddAll([leftFlipper, rightFlipper]); @@ -32,10 +38,17 @@ void main() { group('constructor', () { test('sets BoardSide', () { - final leftFlipper = Flipper.left(position: Vector2.zero()); + final leftFlipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); + expect(leftFlipper.side, equals(leftFlipper.side)); - final rightFlipper = Flipper.right(position: Vector2.zero()); + final rightFlipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); expect(rightFlipper.side, equals(rightFlipper.side)); }); }); @@ -45,7 +58,10 @@ void main() { 'positions correctly', (game) async { final position = Vector2.all(10); - final flipper = Flipper.left(position: position); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: position, + ); await game.ensureAdd(flipper); game.contains(flipper); @@ -56,7 +72,10 @@ void main() { flameTester.test( 'is dynamic', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); expect(flipper.body.bodyType, equals(BodyType.dynamic)); @@ -66,7 +85,10 @@ void main() { flameTester.test( 'ignores gravity', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); expect(flipper.body.gravityScale, isZero); @@ -76,7 +98,10 @@ void main() { flameTester.test( 'has greater mass than Ball', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); final ball = Ball(position: Vector2.zero()); await game.ready(); @@ -94,7 +119,10 @@ void main() { flameTester.test( 'has three', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); expect(flipper.body.fixtures.length, equals(3)); @@ -104,7 +132,10 @@ void main() { flameTester.test( 'has density', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final fixtures = flipper.body.fixtures; @@ -132,7 +163,10 @@ void main() { late Flipper flipper; setUp(() { - flipper = Flipper.left(position: Vector2.zero()); + flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); }); testRawKeyDownEvents(leftKeys, (event) { @@ -196,7 +230,10 @@ void main() { late Flipper flipper; setUp(() { - flipper = Flipper.right(position: Vector2.zero()); + flipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); }); testRawKeyDownEvents(rightKeys, (event) { @@ -263,7 +300,10 @@ void main() { flameTester.test( 'position is at the left of the left Flipper', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -276,7 +316,10 @@ void main() { flameTester.test( 'position is at the right of the right Flipper', (game) async { - final flipper = Flipper.right(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -292,7 +335,10 @@ void main() { flameTester.test( 'limits enabled', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -311,7 +357,10 @@ void main() { flameTester.test( 'when Flipper is left', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -329,7 +378,10 @@ void main() { flameTester.test( 'when Flipper is right', (game) async { - final flipper = Flipper.right(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -352,7 +404,10 @@ void main() { flameTester.test( 'when Flipper is left', (game) async { - final flipper = Flipper.left(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.left, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper); @@ -376,7 +431,10 @@ void main() { flameTester.test( 'when Flipper is right', (game) async { - final flipper = Flipper.right(position: Vector2.zero()); + final flipper = Flipper.fromSide( + side: BoardSide.right, + position: Vector2.zero(), + ); await game.ensureAdd(flipper); final flipperAnchor = FlipperAnchor(flipper: flipper);