diff --git a/lib/game/components/plunger.dart b/lib/game/components/plunger.dart index bf63b462..9bcde451 100644 --- a/lib/game/components/plunger.dart +++ b/lib/game/components/plunger.dart @@ -74,6 +74,25 @@ class Plunger extends BodyComponent with KeyboardHandler { return true; } + + /// Anchors the [Plunger] to the [PrismaticJoint] that controls its vertical + /// motion. + Future _anchorToJoint() async { + final anchor = PlungerAnchor(plunger: this); + await add(anchor); + + final jointDef = PlungerAnchorPrismaticJointDef( + plunger: this, + anchor: anchor, + ); + world.createJoint(jointDef); + } + + @override + Future onLoad() async { + await super.onLoad(); + await _anchorToJoint(); + } } /// {@template plunger_anchor} diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 633c2351..b67a8dad 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -101,7 +101,6 @@ class PinballGame extends Forge2DGame } Future _addPlunger() async { - late PlungerAnchor plungerAnchor; final compressionDistance = camera.viewport.effectiveSize.y / 12; await add( @@ -115,14 +114,6 @@ class PinballGame extends Forge2DGame compressionDistance: compressionDistance, ), ); - await add(plungerAnchor = PlungerAnchor(plunger: plunger)); - - world.createJoint( - PlungerAnchorPrismaticJointDef( - plunger: plunger, - anchor: plungerAnchor, - ), - ); } Future _addBaseboards() async {