refactor: simplified Fixtures creation

pull/283/head
alestiago 3 years ago
parent cc3ba899ce
commit 058549cd39

@ -0,0 +1,17 @@
// ignore_for_file: public_member_api_docs
import 'package:bloc/bloc.dart';
part 'kicker_state.dart';
class KickerCubit extends Cubit<KickerState> {
KickerCubit() : super(KickerState.dimmed);
void onBallContacted() {
emit(KickerState.lit);
}
void onBlinked() {
emit(KickerState.dimmed);
}
}

@ -0,0 +1,8 @@
// ignore_for_file: public_member_api_docs
part of 'kicker_cubit.dart';
enum KickerState {
lit,
dimmed,
}

@ -26,9 +26,6 @@ class Kicker extends BodyComponent with InitialPosition {
renderBody: false, renderBody: false,
); );
/// The size of the [Kicker] body.
static final Vector2 size = Vector2(4.4, 15);
/// Whether the [Kicker] is on the left or right side of the board. /// Whether the [Kicker] is on the left or right side of the board.
/// ///
/// A [Kicker] with [BoardSide.left] propels the [Ball] to the right, /// A [Kicker] with [BoardSide.left] propels the [Ball] to the right,
@ -37,22 +34,18 @@ class Kicker extends BodyComponent with InitialPosition {
final BoardSide _side; final BoardSide _side;
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDefs = <FixtureDef>[];
final direction = _side.direction; final direction = _side.direction;
const quarterPi = math.pi / 4; const quarterPi = math.pi / 4;
final size = Vector2(4.4, 15);
final upperCircle = CircleShape()..radius = 1.6; final upperCircle = CircleShape()..radius = 1.6;
upperCircle.position.setValues(0, upperCircle.radius / 2); upperCircle.position.setValues(0, upperCircle.radius / 2);
final upperCircleFixtureDef = FixtureDef(upperCircle);
fixturesDefs.add(upperCircleFixtureDef);
final lowerCircle = CircleShape()..radius = 1.6; final lowerCircle = CircleShape()..radius = 1.6;
lowerCircle.position.setValues( lowerCircle.position.setValues(
size.x * -direction, size.x * -direction,
size.y + 0.8, size.y + 0.8,
); );
final lowerCircleFixtureDef = FixtureDef(lowerCircle);
fixturesDefs.add(lowerCircleFixtureDef);
final wallFacingEdge = EdgeShape() final wallFacingEdge = EdgeShape()
..set( ..set(
@ -63,8 +56,6 @@ class Kicker extends BodyComponent with InitialPosition {
), ),
Vector2(2.5 * direction, size.y - 2), Vector2(2.5 * direction, size.y - 2),
); );
final wallFacingLineFixtureDef = FixtureDef(wallFacingEdge);
fixturesDefs.add(wallFacingLineFixtureDef);
final bottomEdge = EdgeShape() final bottomEdge = EdgeShape()
..set( ..set(
@ -75,8 +66,6 @@ class Kicker extends BodyComponent with InitialPosition {
lowerCircle.radius * math.sin(quarterPi), lowerCircle.radius * math.sin(quarterPi),
), ),
); );
final bottomLineFixtureDef = FixtureDef(bottomEdge);
fixturesDefs.add(bottomLineFixtureDef);
final bouncyEdge = EdgeShape() final bouncyEdge = EdgeShape()
..set( ..set(
@ -92,12 +81,14 @@ class Kicker extends BodyComponent with InitialPosition {
), ),
); );
final bouncyFixtureDef = FixtureDef( final fixturesDefs = [
bouncyEdge, FixtureDef(upperCircle),
// TODO(alestiago): Play with restitution value once game is bundled. FixtureDef(lowerCircle),
restitution: 10, FixtureDef(wallFacingEdge),
); FixtureDef(bottomEdge),
fixturesDefs.add(bouncyFixtureDef); // TODO(alestiago): Add BumpingBehaviour.
FixtureDef(bouncyEdge),
];
// TODO(alestiago): Evaluate if there is value on centering the fixtures. // TODO(alestiago): Evaluate if there is value on centering the fixtures.
final centroid = geometry.centroid( final centroid = geometry.centroid(

@ -18,9 +18,9 @@ class KickerGame extends BallGame {
await addAll( await addAll(
[ [
Kicker(side: BoardSide.left) Kicker(side: BoardSide.left)
..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), ..initialPosition = Vector2(center.x - 8.8, center.y),
Kicker(side: BoardSide.right) Kicker(side: BoardSide.right)
..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y), ..initialPosition = Vector2(center.x + 8.8, center.y),
], ],
); );

@ -29,7 +29,7 @@ class PlungerGame extends BallGame with KeyboardEvents, Traceable {
final center = screenToWorld(camera.viewport.canvasSize! / 2); final center = screenToWorld(camera.viewport.canvasSize! / 2);
await add( await add(
plunger = Plunger(compressionDistance: 29) plunger = Plunger(compressionDistance: 29)
..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), ..initialPosition = Vector2(center.x - 8.8, center.y),
); );
await traceAllBodies(); await traceAllBodies();
} }

Loading…
Cancel
Save