diff --git a/lib/game/components/ball.dart b/lib/game/components/ball.dart index d90cca78..36ed8929 100644 --- a/lib/game/components/ball.dart +++ b/lib/game/components/ball.dart @@ -39,6 +39,7 @@ class Ball extends BodyComponent with InitialPosition { final fixtureDef = FixtureDef(shape)..density = 1; final bodyDef = BodyDef() + ..position = initialPosition ..userData = this ..type = BodyType.dynamic; diff --git a/lib/game/components/baseboard.dart b/lib/game/components/baseboard.dart index 77f07024..62c9210c 100644 --- a/lib/game/components/baseboard.dart +++ b/lib/game/components/baseboard.dart @@ -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); diff --git a/lib/game/components/bonus_word.dart b/lib/game/components/bonus_word.dart index e1078e30..03f64a11 100644 --- a/lib/game/components/bonus_word.dart +++ b/lib/game/components/bonus_word.dart @@ -129,6 +129,7 @@ class BonusLetter extends BodyComponent final fixtureDef = FixtureDef(shape)..isSensor = true; final bodyDef = BodyDef() + ..position = initialPosition ..userData = this ..type = BodyType.static; diff --git a/lib/game/components/flipper.dart b/lib/game/components/flipper.dart index 03875d36..8b029b1e 100644 --- a/lib/game/components/flipper.dart +++ b/lib/game/components/flipper.dart @@ -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); diff --git a/lib/game/components/initial_position.dart b/lib/game/components/initial_position.dart index dc6958d9..d79f8d64 100644 --- a/lib/game/components/initial_position.dart +++ b/lib/game/components/initial_position.dart @@ -24,6 +24,11 @@ mixin InitialPosition on BodyComponent { @override Future 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.', + ); } } diff --git a/lib/game/components/joint_anchor.dart b/lib/game/components/joint_anchor.dart index 36ad3ab0..e945bd72 100644 --- a/lib/game/components/joint_anchor.dart +++ b/lib/game/components/joint_anchor.dart @@ -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); } } diff --git a/lib/game/components/pathway.dart b/lib/game/components/pathway.dart index bd8caf5d..e4a6f1f5 100644 --- a/lib/game/components/pathway.dart +++ b/lib/game/components/pathway.dart @@ -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() diff --git a/lib/game/components/plunger.dart b/lib/game/components/plunger.dart index 68ccbeb0..6f319bd3 100644 --- a/lib/game/components/plunger.dart +++ b/lib/game/components/plunger.dart @@ -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; diff --git a/lib/game/components/round_bumper.dart b/lib/game/components/round_bumper.dart index af8285af..2f43a35b 100644 --- a/lib/game/components/round_bumper.dart +++ b/lib/game/components/round_bumper.dart @@ -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); } diff --git a/lib/game/components/sling_shot.dart b/lib/game/components/sling_shot.dart index 0002ed0c..61d28c29 100644 --- a/lib/game/components/sling_shot.dart +++ b/lib/game/components/sling_shot.dart @@ -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; diff --git a/test/game/components/initial_position_test.dart b/test/game/components/initial_position_test.dart index 814b1e86..ece083cc 100644 --- a/test/game/components/initial_position_test.dart +++ b/test/game/components/initial_position_test.dart @@ -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)); },