From 69deb44a789ee9aa1b122dac7649519eb78726bd Mon Sep 17 00:00:00 2001 From: alestiago Date: Wed, 30 Mar 2022 20:46:08 +0100 Subject: [PATCH] refactor: removed controllerBuilder --- lib/flame/component_controller.dart | 7 +-- lib/game/components/controlled_ball.dart | 62 ++++++++------------- lib/game/components/flipper_controller.dart | 9 +-- lib/game/components/flutter_forest.dart | 2 +- lib/game/pinball_game.dart | 4 +- test/flame/component_controller_test.dart | 7 +-- 6 files changed, 34 insertions(+), 57 deletions(-) diff --git a/lib/flame/component_controller.dart b/lib/flame/component_controller.dart index a5194c60..4be28c54 100644 --- a/lib/flame/component_controller.dart +++ b/lib/flame/component_controller.dart @@ -29,17 +29,12 @@ abstract class ComponentController extends Component { /// Mixin that attaches a single [ComponentController] to a [Component]. /// {@endtemplate} mixin Controls on Component { - /// Builds a [ComponentController] for this [Component]. - /// - /// **Note**: This method should not be directly called. - T controllerBuilder(); - /// The [ComponentController] attached to this [Component]. late final T controller; @override Future onLoad() async { await super.onLoad(); - await add(controller = controllerBuilder()); + await add(controller); } } diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index 04396575..e0c3a730 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -10,58 +10,40 @@ import 'package:pinball_theme/pinball_theme.dart'; /// {@template controlled_ball} /// A [Ball] with a [BallController] attached. /// {@endtemplate} -abstract class _ControlledBall extends Ball - with Controls { - _ControlledBall({required Color baseColor}) : super(baseColor: baseColor); -} +class ControlledBall extends Ball with Controls { + /// {@macro controlled_ball} + ControlledBall({required Color baseColor}) : super(baseColor: baseColor); -/// {@template plunger_ball} -/// A [Ball] that starts at the [Plunger]. -/// -/// When a [PlungerBall] is lost, it will decrease the [GameState.balls] count, -/// and a new [PlungerBall] is spawned if it's possible. -/// {@endtemplate} -class PlungerBall extends _ControlledBall { - /// {@macro plunger_ball} - PlungerBall({ + /// A [Ball] that starts at the [Plunger]. + /// + /// When a launched [Ball] is lost, it will decrease the [GameState.balls] + /// count, and a new [Ball] is spawned at the [Plunger]. + ControlledBall.launch({ required PinballTheme theme, required Plunger plunger, }) : super(baseColor: theme.characterTheme.ballColor) { - // TODO(alestiago): Dicuss if this is a good idea. initialPosition = Vector2( plunger.body.position.x, plunger.body.position.y + Ball.size.y, ); + controller = PlungerBallController(this); } - @override - PlungerBallController controllerBuilder() => PlungerBallController(this); -} - -/// {@template bonus_ball} -/// {@macro controlled_ball} -/// -/// When a [BonusBall] is lost, the [GameState.balls] doesn't change. -/// {@endtemplate} -class BonusBall extends _ControlledBall { - /// {@macro bonus_ball} - BonusBall({ + /// {@template bonus_ball} + /// {@macro controlled_ball} + /// + /// When a bonus [Ball] is lost, the [GameState.balls] doesn't change. + /// {@endtemplate} + ControlledBall.bonus({ required PinballTheme theme, - }) : super(baseColor: theme.characterTheme.ballColor); - - @override - BallController controllerBuilder() => BallController(this); -} - -/// {@template debug_ball} -/// [Ball] used in [DebugPinballGame]. -/// {@endtemplate} -class DebugBall extends _ControlledBall { - /// {@macro debug_ball} - DebugBall() : super(baseColor: const Color(0xFFFF0000)); + }) : super(baseColor: theme.characterTheme.ballColor) { + controller = BallController(this); + } - @override - BallController controllerBuilder() => BallController(this); + /// [Ball] used in [DebugPinballGame]. + ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) { + controller = BallController(this); + } } /// {@template ball_controller} diff --git a/lib/game/components/flipper_controller.dart b/lib/game/components/flipper_controller.dart index 9153034a..9b73b6d3 100644 --- a/lib/game/components/flipper_controller.dart +++ b/lib/game/components/flipper_controller.dart @@ -8,10 +8,11 @@ import 'package:pinball_components/pinball_components.dart'; /// {@endtemplate} class ControlledFlipper extends Flipper with Controls { /// {@macro controlled_flipper} - ControlledFlipper({required BoardSide side}) : super(side: side); - - @override - FlipperController controllerBuilder() => FlipperController(this); + ControlledFlipper({ + required BoardSide side, + }) : super(side: side) { + controller = FlipperController(this); + } } /// {@template flipper_controller} diff --git a/lib/game/components/flutter_forest.dart b/lib/game/components/flutter_forest.dart index 98e0669e..6eb3ce7d 100644 --- a/lib/game/components/flutter_forest.dart +++ b/lib/game/components/flutter_forest.dart @@ -33,7 +33,7 @@ class FlutterForest extends Component super.onNewState(state); add( - BonusBall( + ControlledBall.bonus( theme: gameRef.theme, )..initialPosition = Vector2(17.2, 52.7), ); diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index fc82e96f..1485031f 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -101,7 +101,7 @@ class PinballGame extends Forge2DGame } void spawnBall() { - final ball = PlungerBall( + final ball = ControlledBall.launch( theme: theme, plunger: plunger, ); @@ -138,7 +138,7 @@ class DebugPinballGame extends PinballGame with TapDetector { @override void onTapUp(TapUpInfo info) { add( - DebugBall()..initialPosition = info.eventPosition.game, + ControlledBall.debug()..initialPosition = info.eventPosition.game, ); } } diff --git a/test/flame/component_controller_test.dart b/test/flame/component_controller_test.dart index cef304b3..4e5da210 100644 --- a/test/flame/component_controller_test.dart +++ b/test/flame/component_controller_test.dart @@ -12,10 +12,9 @@ class TestComponentController extends ComponentController { class ControlledComponent extends Component with Controls { - ControlledComponent() : super(); - - @override - TestComponentController controllerBuilder() => TestComponentController(this); + ControlledComponent() : super() { + controller = TestComponentController(this); + } } void main() {