diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index 9c34a263..8f04a820 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -129,7 +129,7 @@ class _BottomGroupSide extends Component { Future onLoad() async { final direction = _side.direction; - final flipper = Flipper.fromSide( + final flipper = Flipper( side: _side, )..initialPosition = _position; final baseboard = Baseboard(side: _side) diff --git a/lib/game/components/flipper.dart b/lib/game/components/flipper.dart index 800c27a8..b08e33ca 100644 --- a/lib/game/components/flipper.dart +++ b/lib/game/components/flipper.dart @@ -7,6 +7,16 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pinball/game/game.dart'; +const _leftFlipperKeys = [ + LogicalKeyboardKey.arrowLeft, + LogicalKeyboardKey.keyA, +]; + +const _rightFlipperKeys = [ + LogicalKeyboardKey.arrowRight, + LogicalKeyboardKey.keyD, +]; + /// {@template flipper} /// A bat, typically found in pairs at the bottom of the board. /// @@ -14,47 +24,13 @@ import 'package:pinball/game/game.dart'; /// {@endtemplate flipper} class Flipper extends BodyComponent with KeyboardHandler, InitialPosition { /// {@macro flipper} - Flipper._({ + Flipper({ required this.side, - required List keys, - }) : _keys = keys { + }) : _keys = side.isLeft ? _leftFlipperKeys : _rightFlipperKeys { // TODO(alestiago): Remove paint with asset and size correctly. paint = Paint()..color = Colors.transparent; } - Flipper._left() - : this._( - side: BoardSide.left, - keys: [ - LogicalKeyboardKey.arrowLeft, - LogicalKeyboardKey.keyA, - ], - ); - - Flipper._right() - : this._( - side: BoardSide.right, - keys: [ - LogicalKeyboardKey.arrowRight, - LogicalKeyboardKey.keyD, - ], - ); - - /// Constructs a [Flipper] from a [BoardSide]. - /// - /// A [Flipper._right] and [Flipper._left] besides being mirrored - /// horizontally, also have different [LogicalKeyboardKey]s that control them. - factory Flipper.fromSide({ - required BoardSide side, - }) { - switch (side) { - case BoardSide.left: - return Flipper._left(); - case BoardSide.right: - return Flipper._right(); - } - } - /// Asset location of the sprite that renders with the [Flipper]. /// /// Sprite is preloaded by [PinballGameAssetsX]. @@ -251,10 +227,10 @@ class _FlipperAnchorRevoluteJointDef extends RevoluteJointDef { lowerAngle = upperAngle = angle; } - final BoardSide side; - /// The total angle of the arc motion. static const _sweepingAngle = math.pi / 3.5; + + final BoardSide side; } /// {@template flipper_anchor} diff --git a/test/game/components/flipper_test.dart b/test/game/components/flipper_test.dart index cd6a9df0..3c12e37e 100644 --- a/test/game/components/flipper_test.dart +++ b/test/game/components/flipper_test.dart @@ -21,10 +21,10 @@ void main() { flameTester.test( 'loads correctly', (game) async { - final leftFlipper = Flipper.fromSide( + final leftFlipper = Flipper( side: BoardSide.left, ); - final rightFlipper = Flipper.fromSide( + final rightFlipper = Flipper( side: BoardSide.right, ); await game.ready(); @@ -37,13 +37,13 @@ void main() { group('constructor', () { test('sets BoardSide', () { - final leftFlipper = Flipper.fromSide( + final leftFlipper = Flipper( side: BoardSide.left, ); expect(leftFlipper.side, equals(leftFlipper.side)); - final rightFlipper = Flipper.fromSide( + final rightFlipper = Flipper( side: BoardSide.right, ); expect(rightFlipper.side, equals(rightFlipper.side)); @@ -54,7 +54,7 @@ void main() { flameTester.test( 'is dynamic', (game) async { - final flipper = Flipper.fromSide( + final flipper = Flipper( side: BoardSide.left, ); await game.ensureAdd(flipper); @@ -66,7 +66,7 @@ void main() { flameTester.test( 'ignores gravity', (game) async { - final flipper = Flipper.fromSide( + final flipper = Flipper( side: BoardSide.left, ); await game.ensureAdd(flipper); @@ -78,7 +78,7 @@ void main() { flameTester.test( 'has greater mass than Ball', (game) async { - final flipper = Flipper.fromSide( + final flipper = Flipper( side: BoardSide.left, ); final ball = Ball(); @@ -98,7 +98,7 @@ void main() { flameTester.test( 'has three', (game) async { - final flipper = Flipper.fromSide( + final flipper = Flipper( side: BoardSide.left, ); await game.ensureAdd(flipper); @@ -110,7 +110,7 @@ void main() { flameTester.test( 'has density', (game) async { - final flipper = Flipper.fromSide( + final flipper = Flipper( side: BoardSide.left, ); await game.ensureAdd(flipper); @@ -140,7 +140,7 @@ void main() { late Flipper flipper; setUp(() { - flipper = Flipper.fromSide( + flipper = Flipper( side: BoardSide.left, ); }); @@ -206,7 +206,7 @@ void main() { late Flipper flipper; setUp(() { - flipper = Flipper.fromSide( + flipper = Flipper( side: BoardSide.right, ); });