diff --git a/packages/pinball_components/sandbox/lib/common/trace.dart b/packages/pinball_components/sandbox/lib/common/trace.dart index 6aef0fc7..71c28d56 100644 --- a/packages/pinball_components/sandbox/lib/common/trace.dart +++ b/packages/pinball_components/sandbox/lib/common/trace.dart @@ -18,12 +18,17 @@ extension BodyTrace on BodyComponent { } } -extension Forge2DGameTrace on Forge2DGame { - void traceAllBodies({ +mixin Traceable on Forge2DGame { + bool get trace; + + Future traceAllBodies({ Color color = const Color(0xFFFF0000), - }) { - children - .whereType() - .forEach((bodyComponent) => bodyComponent.trace()); + }) async { + if (trace) { + await ready(); + children + .whereType() + .forEach((bodyComponent) => bodyComponent.trace()); + } } } diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart b/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart index ad44100b..5074bdbf 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart @@ -5,10 +5,11 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class FlipperGame extends BasicBallGame with KeyboardEvents { +class FlipperGame extends BasicBallGame with KeyboardEvents, Traceable { FlipperGame({ - required this.trace, - }) : super(color: const Color(0xFFFF0000)); + required bool trace, + }) : _trace = trace, + super(color: const Color(0xFFFF0000)); static const info = ''' Shows how a Flipper works. @@ -17,7 +18,10 @@ class FlipperGame extends BasicBallGame with KeyboardEvents { - Tap anywhere on the screen to spawn a ball into the game. '''; - final bool trace; + final bool _trace; + + @override + bool get trace => _trace; static const _leftFlipperKeys = [ LogicalKeyboardKey.arrowLeft, @@ -47,9 +51,8 @@ class FlipperGame extends BasicBallGame with KeyboardEvents { leftFlipper, rightFlipper, ]); - await ready(); - if (trace) traceAllBodies(); + await traceAllBodies(); } @override diff --git a/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart b/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart index 1986f472..460350f2 100644 --- a/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart @@ -3,10 +3,11 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class KickerGame extends BasicBallGame { +class KickerGame extends BasicBallGame with Traceable { KickerGame({ - required this.trace, - }) : super(color: const Color(0xFFFF0000)); + required bool trace, + }) : _trace = trace, + super(color: const Color(0xFFFF0000)); static const info = ''' Shows how Kickers are rendered. @@ -15,7 +16,10 @@ class KickerGame extends BasicBallGame { - Tap anywhere on the screen to spawn a ball into the game. '''; - final bool trace; + final bool _trace; + + @override + bool get trace => _trace; @override Future onLoad() async { @@ -30,8 +34,7 @@ class KickerGame extends BasicBallGame { final rightKicker = Kicker(side: BoardSide.right) ..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y); await add(rightKicker); - await ready(); - if (trace) traceAllBodies(); + await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart b/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart index f3f1c56d..c32e05d2 100644 --- a/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart @@ -3,10 +3,11 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SlingshotGame extends BasicBallGame { +class SlingshotGame extends BasicBallGame with Traceable { SlingshotGame({ - required this.trace, - }) : super(color: const Color(0xFFFF0000)); + required bool trace, + }) : _trace = trace, + super(color: const Color(0xFFFF0000)); static const info = ''' Shows how Slingshots are rendered. @@ -15,17 +16,16 @@ class SlingshotGame extends BasicBallGame { - Tap anywhere on the screen to spawn a ball into the game. '''; - final bool trace; + final bool _trace; + + @override + bool get trace => _trace; @override Future onLoad() async { await super.onLoad(); - await addFromBlueprint(Slingshots()); - await ready(); - camera.followVector2(Vector2.zero()); - - if (trace) traceAllBodies(); + await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/sparky_bumper/sparky_bumper_game.dart b/packages/pinball_components/sandbox/lib/stories/sparky_bumper/sparky_bumper_game.dart index 0cd7b5cc..f9eee79c 100644 --- a/packages/pinball_components/sandbox/lib/stories/sparky_bumper/sparky_bumper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/sparky_bumper/sparky_bumper_game.dart @@ -5,10 +5,11 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SparkyBumperGame extends BasicBallGame { +class SparkyBumperGame extends BasicBallGame with Traceable { SparkyBumperGame({ - required this.trace, - }) : super(color: const Color(0xFF0000FF)); + required bool trace, + }) : _trace = trace, + super(color: const Color(0xFF0000FF)); static const info = ''' Shows how a SparkyBumper is rendered. @@ -16,7 +17,10 @@ class SparkyBumperGame extends BasicBallGame { Activate the "trace" parameter to overlay the body. '''; - final bool trace; + final bool _trace; + + @override + bool get trace => _trace; @override Future onLoad() async { @@ -37,8 +41,7 @@ class SparkyBumperGame extends BasicBallGame { sparkyBumperB, sparkyBumperC, ]); - await ready(); - if (trace) traceAllBodies(); + await traceAllBodies(); } }