refactor: use relative positioning

pull/25/head
Allison Ryan 4 years ago
parent 7f197a9c3a
commit dbe063b760

@ -11,13 +11,16 @@ import 'package:pinball/game/game.dart' show Anchor;
/// {@endtemplate} /// {@endtemplate}
class Plunger extends BodyComponent with KeyboardHandler { class Plunger extends BodyComponent with KeyboardHandler {
/// {@macro plunger} /// {@macro plunger}
Plunger({required Vector2 position}) : _position = position; Plunger({
required Vector2 position,
required this.compressionDistance,
}) : _position = position;
/// The initial position of the [Plunger] body. /// The initial position of the [Plunger] body.
final Vector2 _position; final Vector2 _position;
/// Distance the plunger can lower. /// Distance the plunger can lower.
static const compressionDistance = 120.0; final double compressionDistance;
@override @override
Body createBody() { Body createBody() {
@ -83,7 +86,7 @@ class PlungerAnchor extends Anchor {
}) : super( }) : super(
position: Vector2( position: Vector2(
plunger.body.position.x, plunger.body.position.x,
plunger.body.position.y - Plunger.compressionDistance, plunger.body.position.y - plunger.compressionDistance,
), ),
); );
} }

@ -15,18 +15,6 @@ class PinballGame extends Forge2DGame
late final Plunger plunger; late final Plunger plunger;
// TODO(erickzanardo): Change to the plumber position
late final ballStartingPosition = screenToWorld(
Vector2(
camera.viewport.effectiveSize.x / 2,
camera.viewport.effectiveSize.y - 20,
),
) -
Vector2(0, -20);
// TODO(alestiago): Change to the design position.
late final flippersPosition = ballStartingPosition - Vector2(0, 5);
@override @override
void onAttach() { void onAttach() {
super.onAttach(); super.onAttach();
@ -80,7 +68,7 @@ class PinballGame extends Forge2DGame
final flippersPosition = screenToWorld( final flippersPosition = screenToWorld(
Vector2( Vector2(
camera.viewport.effectiveSize.x / 2, camera.viewport.effectiveSize.x / 2,
camera.viewport.effectiveSize.y - 120, camera.viewport.effectiveSize.y / 1.1,
), ),
); );
const spaceBetweenFlippers = 2; const spaceBetweenFlippers = 2;
@ -144,15 +132,17 @@ class PinballGame extends Forge2DGame
Future<void> _addPlunger() async { Future<void> _addPlunger() async {
late PlungerAnchor plungerAnchor; late PlungerAnchor plungerAnchor;
final compressionDistance = camera.viewport.effectiveSize.y / 12;
await add( await add(
plunger = Plunger( plunger = Plunger(
position: screenToWorld( position: screenToWorld(
Vector2( Vector2(
camera.viewport.effectiveSize.x - 30, camera.viewport.effectiveSize.x / 1.035,
camera.viewport.effectiveSize.y - Plunger.compressionDistance, camera.viewport.effectiveSize.y - compressionDistance,
), ),
), ),
compressionDistance: compressionDistance,
), ),
); );
await add(plungerAnchor = PlungerAnchor(plunger: plunger)); await add(plungerAnchor = PlungerAnchor(plunger: plunger));

@ -16,11 +16,16 @@ void main() {
final flameTester = FlameTester(PinballGameX.initial); final flameTester = FlameTester(PinballGameX.initial);
group('Plunger', () { group('Plunger', () {
const compressionDistance = 0.0;
flameTester.test( flameTester.test(
'loads correctly', 'loads correctly',
(game) async { (game) async {
await game.ready(); await game.ready();
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
expect(game.contains(plunger), isTrue); expect(game.contains(plunger), isTrue);
@ -32,7 +37,10 @@ void main() {
'positions correctly', 'positions correctly',
(game) async { (game) async {
final position = Vector2.all(10); final position = Vector2.all(10);
final plunger = Plunger(position: position); final plunger = Plunger(
position: position,
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
game.contains(plunger); game.contains(plunger);
@ -43,7 +51,10 @@ void main() {
flameTester.test( flameTester.test(
'is dynamic', 'is dynamic',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
expect(plunger.body.bodyType, equals(BodyType.dynamic)); expect(plunger.body.bodyType, equals(BodyType.dynamic));
@ -53,7 +64,10 @@ void main() {
flameTester.test( flameTester.test(
'ignores gravity', 'ignores gravity',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
expect(plunger.body.gravityScale, isZero); expect(plunger.body.gravityScale, isZero);
@ -65,7 +79,10 @@ void main() {
flameTester.test( flameTester.test(
'exists', 'exists',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
expect(plunger.body.fixtures[0], isA<Fixture>()); expect(plunger.body.fixtures[0], isA<Fixture>());
@ -75,7 +92,10 @@ void main() {
flameTester.test( flameTester.test(
'shape is a polygon', 'shape is a polygon',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
final fixture = plunger.body.fixtures[0]; final fixture = plunger.body.fixtures[0];
@ -86,7 +106,10 @@ void main() {
flameTester.test( flameTester.test(
'has density', 'has density',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
final fixture = plunger.body.fixtures[0]; final fixture = plunger.body.fixtures[0];
@ -105,7 +128,10 @@ void main() {
late Plunger plunger; late Plunger plunger;
setUp(() { setUp(() {
plunger = Plunger(position: Vector2.zero()); plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
}); });
testRawKeyUpEvents(keys, (event) { testRawKeyUpEvents(keys, (event) {
@ -162,10 +188,15 @@ void main() {
}); });
group('PlungerAnchor', () { group('PlungerAnchor', () {
const compressionDistance = 10.0;
flameTester.test( flameTester.test(
'position is a compression distance below the Plunger', 'position is a compression distance below the Plunger',
(game) async { (game) async {
final plunger = Plunger(position: Vector2.zero()); final plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
await game.ensureAdd(plunger); await game.ensureAdd(plunger);
final plungerAnchor = PlungerAnchor(plunger: plunger); final plungerAnchor = PlungerAnchor(plunger: plunger);
@ -173,16 +204,16 @@ void main() {
expect( expect(
plungerAnchor.body.position.y, plungerAnchor.body.position.y,
equals(plunger.body.position.y - Plunger.compressionDistance), equals(plunger.body.position.y - compressionDistance),
); );
}, },
); );
}); });
group('PlungerAnchorPrismaticJointDef', () { group('PlungerAnchorPrismaticJointDef', () {
late Plunger plunger; const compressionDistance = 10.0;
final gameBloc = MockGameBloc(); final gameBloc = MockGameBloc();
late Plunger plunger;
setUp(() { setUp(() {
whenListen( whenListen(
@ -190,7 +221,10 @@ void main() {
const Stream<GameState>.empty(), const Stream<GameState>.empty(),
initialState: const GameState.initial(), initialState: const GameState.initial(),
); );
plunger = Plunger(position: Vector2.zero()); plunger = Plunger(
position: Vector2.zero(),
compressionDistance: compressionDistance,
);
}); });
final flameTester = flameBlocTester(gameBloc: gameBloc); final flameTester = flameBlocTester(gameBloc: gameBloc);

Loading…
Cancel
Save