feat: implemented PlungerBallController

pull/111/head
alestiago 4 years ago
parent c5b271003c
commit 27f6d839cc

@ -16,6 +16,7 @@ abstract class ComponentController<T extends Component> extends Component {
/// Ads the [ComponentController] to its [component]. /// Ads the [ComponentController] to its [component].
Future<void> attach() async { Future<void> attach() async {
// TODO(alestiago): check if component already attached.
await component.add(this); await component.add(this);
} }

@ -1,4 +1,5 @@
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/forge2d_game.dart';
import 'package:pinball/flame/flame.dart'; import 'package:pinball/flame/flame.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -6,8 +7,7 @@ import 'package:pinball_components/pinball_components.dart';
/// {@template ball_controller} /// {@template ball_controller}
/// Controller attached to a [Ball] that handles its game related logic. /// Controller attached to a [Ball] that handles its game related logic.
/// {@endtemplate} /// {@endtemplate}
class BallController extends ComponentController<Ball> class BallController extends ComponentController<Ball> {
with HasGameRef<PinballGame> {
/// {@macro ball_controller} /// {@macro ball_controller}
BallController(Ball ball) : super(ball); BallController(Ball ball) : super(ball);
@ -17,6 +17,19 @@ class BallController extends ComponentController<Ball>
/// Triggered by [BottomWallBallContactCallback] when the [Ball] falls into /// Triggered by [BottomWallBallContactCallback] when the [Ball] falls into
/// a [BottomWall]. /// a [BottomWall].
void lost() { void lost() {
component.shouldRemove = true;
}
}
/// {@macro ball_controller}
class PlungerBallController extends BallController
with HasGameRef<PinballGame> {
/// {@macro ball_controller}
PlungerBallController(Ball<Forge2DGame> ball) : super(ball);
@override
void lost() {
super.lost();
final bloc = gameRef.read<GameBloc>()..add(const BallLost()); final bloc = gameRef.read<GameBloc>()..add(const BallLost());
final shouldBallRespwan = !bloc.state.isLastBall && !bloc.state.isGameOver; final shouldBallRespwan = !bloc.state.isLastBall && !bloc.state.isGameOver;

@ -1,4 +1,4 @@
export 'ball.dart'; export 'ball_controller.dart';
export 'baseboard.dart'; export 'baseboard.dart';
export 'board.dart'; export 'board.dart';
export 'bonus_word.dart'; export 'bonus_word.dart';

@ -31,11 +31,12 @@ class FlutterForest extends Component
@override @override
void onNewState(GameState state) { void onNewState(GameState state) {
super.onNewState(state); super.onNewState(state);
gameRef.add(
Ball( final ball = Ball(
baseColor: gameRef.theme.characterTheme.ballColor, baseColor: gameRef.theme.characterTheme.ballColor,
)..initialPosition = Vector2(17.2, 52.7), )..initialPosition = Vector2(17.2, 52.7);
); BallController(ball).attach();
gameRef.add(ball);
} }
@override @override

@ -107,7 +107,7 @@ class PinballGame extends Forge2DGame
plunger.body.position.x, plunger.body.position.x,
plunger.body.position.y + Ball.size.y, plunger.body.position.y + Ball.size.y,
); );
BallController(ball).attach(); PlungerBallController(ball).attach();
add(ball); add(ball);
} }
} }
@ -140,9 +140,9 @@ class DebugPinballGame extends PinballGame with TapDetector {
@override @override
void onTapUp(TapUpInfo info) { void onTapUp(TapUpInfo info) {
add( final ball = Ball(baseColor: const Color(0xFFFF0000))
Ball(baseColor: const Color(0xFFFF0000)) ..initialPosition = info.eventPosition.game;
..initialPosition = info.eventPosition.game, BallController(ball).attach();
); add(ball);
} }
} }

Loading…
Cancel
Save