fix: used `initialPosition` in `BodyDef` (#52)

* fix: using BodyDef

* feat: included test

* refactor: removed TODO
pull/53/head
Alejandro Santiago 3 years ago committed by GitHub
parent 0dc8851e3b
commit dc3de740d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -39,6 +39,7 @@ class Ball extends BodyComponent<PinballGame> with InitialPosition {
final fixtureDef = FixtureDef(shape)..density = 1;
final bodyDef = BodyDef()
..position = initialPosition
..userData = this
..type = BodyType.dynamic;

@ -58,7 +58,7 @@ class Baseboard extends BodyComponent with InitialPosition {
const angle = math.pi / 7;
final bodyDef = BodyDef()
..type = BodyType.static
..position = initialPosition
..angle = _side.isLeft ? -angle : angle;
final body = world.createBody(bodyDef);

@ -129,6 +129,7 @@ class BonusLetter extends BodyComponent<PinballGame>
final fixtureDef = FixtureDef(shape)..isSensor = true;
final bodyDef = BodyDef()
..position = initialPosition
..userData = this
..type = BodyType.static;

@ -189,6 +189,7 @@ class Flipper extends BodyComponent with KeyboardHandler, InitialPosition {
@override
Body createBody() {
final bodyDef = BodyDef()
..position = initialPosition
..gravityScale = 0
..type = BodyType.dynamic;
final body = world.createBody(bodyDef);

@ -24,6 +24,11 @@ mixin InitialPosition<T extends Forge2DGame> on BodyComponent<T> {
@override
Future<void> onLoad() async {
await super.onLoad();
body.position.setFrom(initialPosition);
// TODO(alestiago): Investiagate why body.position.setFrom(initialPosition)
// works for some components and not others.
assert(
body.position == initialPosition,
'Body position does not match initialPosition.',
);
}
}

@ -22,6 +22,7 @@ class JointAnchor extends BodyComponent with InitialPosition {
@override
Body createBody() {
return world.createBody(BodyDef());
final bodyDef = BodyDef()..position = initialPosition;
return world.createBody(bodyDef);
}
}

@ -148,7 +148,7 @@ class Pathway extends BodyComponent with InitialPosition {
@override
Body createBody() {
final bodyDef = BodyDef()..type = BodyType.static;
final bodyDef = BodyDef()..position = initialPosition;
final body = world.createBody(bodyDef);
for (final path in _paths) {
final chain = ChainShape()

@ -25,6 +25,7 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition {
final fixtureDef = FixtureDef(shape)..density = 5;
final bodyDef = BodyDef()
..position = initialPosition
..userData = this
..type = BodyType.dynamic
..gravityScale = 0;

@ -27,7 +27,7 @@ class RoundBumper extends BodyComponent with ScorePoints, InitialPosition {
final fixtureDef = FixtureDef(shape)..restitution = 1;
final bodyDef = BodyDef()..type = BodyType.static;
final bodyDef = BodyDef()..position = initialPosition;
return world.createBody(bodyDef)..createFixture(fixtureDef);
}

@ -83,7 +83,8 @@ class SlingShot extends BodyComponent with InitialPosition {
@override
Body createBody() {
final body = world.createBody(BodyDef());
final bodyDef = BodyDef()..position = initialPosition;
final body = world.createBody(bodyDef);
_createFixtureDefs().forEach(body.createFixture);
return body;

@ -12,6 +12,13 @@ class TestBodyComponent extends BodyComponent with InitialPosition {
}
}
class TestPositionedBodyComponent extends BodyComponent with InitialPosition {
@override
Body createBody() {
return world.createBody(BodyDef()..position = initialPosition);
}
}
void main() {
final flameTester = FlameTester(Forge2DGame.new);
group('InitialPosition', () {
@ -20,11 +27,27 @@ void main() {
expect(component.initialPosition, Vector2(1, 2));
});
flameTester.test(
'throws AssertionError '
'when BodyDef is not positioned with initialPosition',
(game) async {
final component = TestBodyComponent()
..initialPosition = Vector2.all(
10,
);
await expectLater(
() => game.ensureAdd(component),
throwsAssertionError,
);
},
);
flameTester.test(
'positions correctly',
(game) async {
final position = Vector2.all(10);
final component = TestBodyComponent()..initialPosition = position;
final component = TestPositionedBodyComponent()
..initialPosition = position;
await game.ensureAdd(component);
expect(component.body.position, equals(position));
},

Loading…
Cancel
Save