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

* fix: using BodyDef

* feat: included test

* refactor: removed TODO
pull/53/head
Alejandro Santiago 4 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 fixtureDef = FixtureDef(shape)..density = 1;
final bodyDef = BodyDef() final bodyDef = BodyDef()
..position = initialPosition
..userData = this ..userData = this
..type = BodyType.dynamic; ..type = BodyType.dynamic;

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

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

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

@ -24,6 +24,11 @@ mixin InitialPosition<T extends Forge2DGame> on BodyComponent<T> {
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); 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 @override
Body createBody() { 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 @override
Body createBody() { Body createBody() {
final bodyDef = BodyDef()..type = BodyType.static; final bodyDef = BodyDef()..position = initialPosition;
final body = world.createBody(bodyDef); final body = world.createBody(bodyDef);
for (final path in _paths) { for (final path in _paths) {
final chain = ChainShape() final chain = ChainShape()

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

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

@ -83,7 +83,8 @@ class SlingShot extends BodyComponent with InitialPosition {
@override @override
Body createBody() { Body createBody() {
final body = world.createBody(BodyDef()); final bodyDef = BodyDef()..position = initialPosition;
final body = world.createBody(bodyDef);
_createFixtureDefs().forEach(body.createFixture); _createFixtureDefs().forEach(body.createFixture);
return body; 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() { void main() {
final flameTester = FlameTester(Forge2DGame.new); final flameTester = FlameTester(Forge2DGame.new);
group('InitialPosition', () { group('InitialPosition', () {
@ -20,11 +27,27 @@ void main() {
expect(component.initialPosition, Vector2(1, 2)); 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( flameTester.test(
'positions correctly', 'positions correctly',
(game) async { (game) async {
final position = Vector2.all(10); final position = Vector2.all(10);
final component = TestBodyComponent()..initialPosition = position; final component = TestPositionedBodyComponent()
..initialPosition = position;
await game.ensureAdd(component); await game.ensureAdd(component);
expect(component.body.position, equals(position)); expect(component.body.position, equals(position));
}, },

Loading…
Cancel
Save