From 5db0c83581c85d66769db7c1e60641925c0f33b5 Mon Sep 17 00:00:00 2001 From: alestiago Date: Thu, 31 Mar 2022 12:24:29 +0100 Subject: [PATCH] refactor: included BonusBallController --- lib/game/components/controlled_ball.dart | 22 ++++++++++++++----- .../game/components/controlled_ball_test.dart | 6 ++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index 463c158f..50687f24 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -28,19 +28,19 @@ class ControlledBall extends Ball with Controls { ControlledBall.bonus({ required PinballTheme theme, }) : super(baseColor: theme.characterTheme.ballColor) { - controller = BallController(this); + controller = BonusBallController(this); } /// [Ball] used in [DebugPinballGame]. ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) { - controller = BallController(this); + controller = BonusBallController(this); } } /// {@template ball_controller} /// Controller attached to a [Ball] that handles its game related logic. /// {@endtemplate} -class BallController extends ComponentController { +abstract class BallController extends ComponentController { /// {@macro ball_controller} BallController(Ball ball) : super(ball); @@ -50,7 +50,19 @@ class BallController extends ComponentController { /// Triggered by [BottomWallBallContactCallback] when the [Ball] falls into /// a [BottomWall]. /// {@endtemplate} - @mustCallSuper + void lost(); +} + +/// {@template bonus_ball_controller} +/// {@macro ball_controller} +/// +/// A [BonusBallController] doesn't change the [GameState.balls] count. +/// {@endtemplate} +class BonusBallController extends BallController { + /// {@macro bonus_ball_controller} + BonusBallController(Ball component) : super(component); + + @override void lost() { component.shouldRemove = true; } @@ -68,8 +80,6 @@ class LaunchedBallController extends BallController /// {@macro ball_controller_lost} @override void lost() { - super.lost(); - final bloc = gameRef.read()..add(const BallLost()); // TODO(alestiago): Consider the use of onNewState instead. diff --git a/test/game/components/controlled_ball_test.dart b/test/game/components/controlled_ball_test.dart index 9cf1dd7e..a4d2f45d 100644 --- a/test/game/components/controlled_ball_test.dart +++ b/test/game/components/controlled_ball_test.dart @@ -15,7 +15,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(PinballGameTest.create); - group('BallController', () { + group('BonusBallController', () { late Ball ball; setUp(() { @@ -26,7 +26,7 @@ void main() { 'lost removes ball', (game) async { await game.add(ball); - final controller = BallController(ball); + final controller = BonusBallController(ball); await ball.add(controller); await game.ready(); @@ -118,7 +118,7 @@ void main() { bonusHistory: [], ), ); - final controller = BallController(ball); + final controller = LaunchedBallController(ball); await ball.add(controller); await game.add(ball); await game.ready();