refactor: removed controllerBuilder

pull/111/head
alestiago 4 years ago
parent 94d39d092d
commit 69deb44a78

@ -29,17 +29,12 @@ abstract class ComponentController<T extends Component> extends Component {
/// Mixin that attaches a single [ComponentController] to a [Component]. /// Mixin that attaches a single [ComponentController] to a [Component].
/// {@endtemplate} /// {@endtemplate}
mixin Controls<T extends ComponentController> on Component { mixin Controls<T extends ComponentController> on Component {
/// Builds a [ComponentController] for this [Component].
///
/// **Note**: This method should not be directly called.
T controllerBuilder();
/// The [ComponentController] attached to this [Component]. /// The [ComponentController] attached to this [Component].
late final T controller; late final T controller;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
await add(controller = controllerBuilder()); await add(controller);
} }
} }

@ -10,58 +10,40 @@ import 'package:pinball_theme/pinball_theme.dart';
/// {@template controlled_ball} /// {@template controlled_ball}
/// A [Ball] with a [BallController] attached. /// A [Ball] with a [BallController] attached.
/// {@endtemplate} /// {@endtemplate}
abstract class _ControlledBall<T extends BallController> extends Ball class ControlledBall extends Ball with Controls<BallController> {
with Controls<T> { /// {@macro controlled_ball}
_ControlledBall({required Color baseColor}) : super(baseColor: baseColor); ControlledBall({required Color baseColor}) : super(baseColor: baseColor);
}
/// {@template plunger_ball}
/// A [Ball] that starts at the [Plunger]. /// A [Ball] that starts at the [Plunger].
/// ///
/// When a [PlungerBall] is lost, it will decrease the [GameState.balls] count, /// When a launched [Ball] is lost, it will decrease the [GameState.balls]
/// and a new [PlungerBall] is spawned if it's possible. /// count, and a new [Ball] is spawned at the [Plunger].
/// {@endtemplate} ControlledBall.launch({
class PlungerBall extends _ControlledBall<PlungerBallController> {
/// {@macro plunger_ball}
PlungerBall({
required PinballTheme theme, required PinballTheme theme,
required Plunger plunger, required Plunger plunger,
}) : super(baseColor: theme.characterTheme.ballColor) { }) : super(baseColor: theme.characterTheme.ballColor) {
// TODO(alestiago): Dicuss if this is a good idea.
initialPosition = Vector2( initialPosition = Vector2(
plunger.body.position.x, plunger.body.position.x,
plunger.body.position.y + Ball.size.y, plunger.body.position.y + Ball.size.y,
); );
} controller = PlungerBallController(this);
@override
PlungerBallController controllerBuilder() => PlungerBallController(this);
} }
/// {@template bonus_ball} /// {@template bonus_ball}
/// {@macro controlled_ball} /// {@macro controlled_ball}
/// ///
/// When a [BonusBall] is lost, the [GameState.balls] doesn't change. /// When a bonus [Ball] is lost, the [GameState.balls] doesn't change.
/// {@endtemplate} /// {@endtemplate}
class BonusBall extends _ControlledBall<BallController> { ControlledBall.bonus({
/// {@macro bonus_ball}
BonusBall({
required PinballTheme theme, required PinballTheme theme,
}) : super(baseColor: theme.characterTheme.ballColor); }) : super(baseColor: theme.characterTheme.ballColor) {
controller = BallController(this);
@override
BallController controllerBuilder() => BallController(this);
} }
/// {@template debug_ball}
/// [Ball] used in [DebugPinballGame]. /// [Ball] used in [DebugPinballGame].
/// {@endtemplate} ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) {
class DebugBall extends _ControlledBall<BallController> { controller = BallController(this);
/// {@macro debug_ball} }
DebugBall() : super(baseColor: const Color(0xFFFF0000));
@override
BallController controllerBuilder() => BallController(this);
} }
/// {@template ball_controller} /// {@template ball_controller}

@ -8,10 +8,11 @@ import 'package:pinball_components/pinball_components.dart';
/// {@endtemplate} /// {@endtemplate}
class ControlledFlipper extends Flipper with Controls<FlipperController> { class ControlledFlipper extends Flipper with Controls<FlipperController> {
/// {@macro controlled_flipper} /// {@macro controlled_flipper}
ControlledFlipper({required BoardSide side}) : super(side: side); ControlledFlipper({
required BoardSide side,
@override }) : super(side: side) {
FlipperController controllerBuilder() => FlipperController(this); controller = FlipperController(this);
}
} }
/// {@template flipper_controller} /// {@template flipper_controller}

@ -33,7 +33,7 @@ class FlutterForest extends Component
super.onNewState(state); super.onNewState(state);
add( add(
BonusBall( ControlledBall.bonus(
theme: gameRef.theme, theme: gameRef.theme,
)..initialPosition = Vector2(17.2, 52.7), )..initialPosition = Vector2(17.2, 52.7),
); );

@ -101,7 +101,7 @@ class PinballGame extends Forge2DGame
} }
void spawnBall() { void spawnBall() {
final ball = PlungerBall( final ball = ControlledBall.launch(
theme: theme, theme: theme,
plunger: plunger, plunger: plunger,
); );
@ -138,7 +138,7 @@ class DebugPinballGame extends PinballGame with TapDetector {
@override @override
void onTapUp(TapUpInfo info) { void onTapUp(TapUpInfo info) {
add( add(
DebugBall()..initialPosition = info.eventPosition.game, ControlledBall.debug()..initialPosition = info.eventPosition.game,
); );
} }
} }

@ -12,10 +12,9 @@ class TestComponentController extends ComponentController {
class ControlledComponent extends Component class ControlledComponent extends Component
with Controls<TestComponentController> { with Controls<TestComponentController> {
ControlledComponent() : super(); ControlledComponent() : super() {
controller = TestComponentController(this);
@override }
TestComponentController controllerBuilder() => TestComponentController(this);
} }
void main() { void main() {

Loading…
Cancel
Save