From 1f72dbfd4a8dfe9e1b0f7250c50c047a2f128520 Mon Sep 17 00:00:00 2001 From: Alejandro Santiago Date: Mon, 25 Apr 2022 13:06:21 +0100 Subject: [PATCH] refactor(sandbox): reduced Stories boilerplate code (#227) * refactor: implemented addGame method * refactor: renamed extension to StoryAddGame * refactor: renamed .info to .description * refactor: used imagesFileNames to cache images * feat: specified simple toPath method * refactor: removed unused import * refactor: usde correct title * fix: moved camera to center * refactor: removed redundant Traceable * feat: modified trace algorithm --- .../lib/src/components/google_letter.dart | 1 + .../lib/src/components/kicker.dart | 1 + .../lib/src/components/plunger.dart | 1 + .../sandbox/lib/common/add_game.dart | 36 +++++++++++ .../sandbox/lib/common/common.dart | 2 +- .../sandbox/lib/common/games.dart | 21 +++++-- .../sandbox/lib/common/methods.dart | 3 - .../sandbox/lib/common/trace.dart | 2 +- .../pinball_components/sandbox/lib/main.dart | 4 -- .../alien_zone/alien_bumper_a_game.dart | 29 ++++----- .../alien_zone/alien_bumper_b_game.dart | 29 ++++----- .../spaceship_game.dart} | 10 +-- .../spaceship_rail_game.dart | 10 ++- .../spaceship_ramp_game.dart | 34 +++++------ .../lib/stories/alien_zone/stories.dart | 41 ++++++++----- .../backboard/backboard_game_over_game.dart | 23 ++++--- .../backboard/backboard_waiting_game.dart | 16 +++-- .../lib/stories/backboard/stories.dart | 33 ++++------ .../lib/stories/ball/ball_booster_game.dart | 2 +- .../lib/stories/ball/basic_ball_game.dart | 14 +++-- .../sandbox/lib/stories/ball/stories.dart | 25 +++----- .../lib/stories/baseboard/baseboard_game.dart | 33 +++++----- .../lib/stories/baseboard/stories.dart | 12 ++-- .../stories/boundaries/boundaries_game.dart | 26 ++++---- .../lib/stories/boundaries/stories.dart | 12 ++-- .../stories/chrome_dino/chrome_dino_game.dart | 2 +- .../lib/stories/chrome_dino/stories.dart | 12 ++-- .../camera_zoom_game.dart} | 4 +- .../lib/stories/effects/fire_effect_game.dart | 2 +- .../sandbox/lib/stories/effects/stories.dart | 19 +++--- .../lib/stories/flipper/flipper_game.dart | 30 +++++---- .../sandbox/lib/stories/flipper/stories.dart | 12 ++-- .../big_dash_nest_bumper_game.dart | 22 ++++--- .../stories/flutter_forest/signpost_game.dart | 22 ++++--- .../small_dash_nest_bumper_a_game.dart | 18 +++--- .../small_dash_nest_bumper_b_game.dart | 18 +++--- .../lib/stories/flutter_forest/stories.dart | 48 +++++---------- .../google_word/google_letter_game.dart | 4 +- .../lib/stories/google_word/stories.dart | 12 ++-- .../lib/stories/kicker/kicker_game.dart | 21 +++---- .../sandbox/lib/stories/kicker/stories.dart | 12 ++-- .../stories/launch_ramp/launch_ramp_game.dart | 10 ++- .../lib/stories/launch_ramp/stories.dart | 12 ++-- ...{basic_layer_game.dart => layer_game.dart} | 61 +++++++------------ .../sandbox/lib/stories/layer/stories.dart | 17 ++---- .../lib/stories/plunger/plunger_game.dart | 13 ++-- .../sandbox/lib/stories/plunger/stories.dart | 12 ++-- .../{basic.dart => score_text_game.dart} | 4 +- .../lib/stories/score_text/stories.dart | 14 ++--- .../lib/stories/slingshot/slingshot_game.dart | 21 ++++--- .../lib/stories/slingshot/stories.dart | 12 ++-- .../lib/stories/spaceship/stories.dart | 15 ----- .../lib/stories/spaceship_rail/stories.dart | 16 ----- .../lib/stories/spaceship_ramp/stories.dart | 16 ----- .../sparky_bumper/sparky_bumper_game.dart | 5 +- .../lib/stories/sparky_bumper/stories.dart | 12 ++-- .../sandbox/lib/stories/stories.dart | 4 -- .../sandbox/lib/stories/zoom/stories.dart | 15 ----- 58 files changed, 424 insertions(+), 513 deletions(-) create mode 100644 packages/pinball_components/sandbox/lib/common/add_game.dart delete mode 100644 packages/pinball_components/sandbox/lib/common/methods.dart rename packages/pinball_components/sandbox/lib/stories/{spaceship/basic_spaceship_game.dart => alien_zone/spaceship_game.dart} (79%) rename packages/pinball_components/sandbox/lib/stories/{spaceship_rail => alien_zone}/spaceship_rail_game.dart (82%) rename packages/pinball_components/sandbox/lib/stories/{spaceship_ramp => alien_zone}/spaceship_ramp_game.dart (59%) rename packages/pinball_components/sandbox/lib/stories/{zoom/basic_zoom_game.dart => effects/camera_zoom_game.dart} (89%) rename packages/pinball_components/sandbox/lib/stories/layer/{basic_layer_game.dart => layer_game.dart} (61%) rename packages/pinball_components/sandbox/lib/stories/score_text/{basic.dart => score_text_game.dart} (88%) delete mode 100644 packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart delete mode 100644 packages/pinball_components/sandbox/lib/stories/spaceship_rail/stories.dart delete mode 100644 packages/pinball_components/sandbox/lib/stories/spaceship_ramp/stories.dart delete mode 100644 packages/pinball_components/sandbox/lib/stories/zoom/stories.dart diff --git a/packages/pinball_components/lib/src/components/google_letter.dart b/packages/pinball_components/lib/src/components/google_letter.dart index 1ed31435..43a4c113 100644 --- a/packages/pinball_components/lib/src/components/google_letter.dart +++ b/packages/pinball_components/lib/src/components/google_letter.dart @@ -78,6 +78,7 @@ class _GoogleLetterSprite extends SpriteComponent with HasGameRef { Future onLoad() async { await super.onLoad(); + // TODO(alestiago): Used cached assets. final sprite = await gameRef.loadSprite(_path); this.sprite = sprite; // TODO(alestiago): Size correctly once the assets are provided. diff --git a/packages/pinball_components/lib/src/components/kicker.dart b/packages/pinball_components/lib/src/components/kicker.dart index 26e6c8f9..f6963d7c 100644 --- a/packages/pinball_components/lib/src/components/kicker.dart +++ b/packages/pinball_components/lib/src/components/kicker.dart @@ -136,6 +136,7 @@ class _KickerSpriteComponent extends SpriteComponent with HasGameRef { Future onLoad() async { await super.onLoad(); + // TODO(alestiago): Used cached asset. final sprite = await gameRef.loadSprite( (_side.isLeft) ? Assets.images.kicker.left.keyName diff --git a/packages/pinball_components/lib/src/components/plunger.dart b/packages/pinball_components/lib/src/components/plunger.dart index efa8817a..295c799d 100644 --- a/packages/pinball_components/lib/src/components/plunger.dart +++ b/packages/pinball_components/lib/src/components/plunger.dart @@ -148,6 +148,7 @@ class _PlungerSpriteAnimationGroupComponent Future onLoad() async { await super.onLoad(); + // TODO(alestiago): Used cached images. final spriteSheet = await gameRef.images.load( Assets.images.plunger.plunger.keyName, ); diff --git a/packages/pinball_components/sandbox/lib/common/add_game.dart b/packages/pinball_components/sandbox/lib/common/add_game.dart new file mode 100644 index 00000000..5b6388d3 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/common/add_game.dart @@ -0,0 +1,36 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:sandbox/common/common.dart'; + +const _path = + 'https://github.com/VGVentures/pinball/tree/main/packages/pinball_components/sandbox/lib/stories/'; + +extension StoryAddGame on Story { + void addGame({ + required String title, + required String description, + required Game Function(DashbookContext) gameBuilder, + }) { + final _chapter = Chapter( + title, + (DashbookContext context) { + final game = gameBuilder(context); + if (game is Traceable) { + game.trace = context.boolProperty('Trace', true); + } + + return GameWidget(game: game); + }, + this, + codeLink: '$_path${name.toPath()}/${title.toPath()}', + info: description, + ); + chapters.add(_chapter); + } +} + +extension on String { + String toPath() { + return replaceAll(' ', '_')..toLowerCase(); + } +} diff --git a/packages/pinball_components/sandbox/lib/common/common.dart b/packages/pinball_components/sandbox/lib/common/common.dart index bb232e24..53010f5e 100644 --- a/packages/pinball_components/sandbox/lib/common/common.dart +++ b/packages/pinball_components/sandbox/lib/common/common.dart @@ -1,3 +1,3 @@ +export 'add_game.dart'; export 'games.dart'; -export 'methods.dart'; export 'trace.dart'; diff --git a/packages/pinball_components/sandbox/lib/common/games.dart b/packages/pinball_components/sandbox/lib/common/games.dart index 4fb158bd..89d16450 100644 --- a/packages/pinball_components/sandbox/lib/common/games.dart +++ b/packages/pinball_components/sandbox/lib/common/games.dart @@ -5,16 +5,25 @@ import 'package:flame/input.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; -abstract class BasicGame extends Forge2DGame { - BasicGame() { +abstract class AssetsGame extends Forge2DGame { + AssetsGame({ + List? imagesFileNames, + }) : _imagesFileNames = imagesFileNames { images.prefix = ''; } -} -abstract class BasicKeyboardGame extends BasicGame - with HasKeyboardHandlerComponents {} + final List? _imagesFileNames; + + @override + Future onLoad() async { + await super.onLoad(); + if (_imagesFileNames != null) { + await images.loadAll(_imagesFileNames!); + } + } +} -abstract class LineGame extends BasicGame with PanDetector { +abstract class LineGame extends AssetsGame with PanDetector { Vector2? _lineEnd; @override diff --git a/packages/pinball_components/sandbox/lib/common/methods.dart b/packages/pinball_components/sandbox/lib/common/methods.dart deleted file mode 100644 index 35198922..00000000 --- a/packages/pinball_components/sandbox/lib/common/methods.dart +++ /dev/null @@ -1,3 +0,0 @@ -String buildSourceLink(String path) { - return 'https://github.com/VGVentures/pinball/tree/main/packages/pinball_components/sandbox/lib/stories/$path'; -} diff --git a/packages/pinball_components/sandbox/lib/common/trace.dart b/packages/pinball_components/sandbox/lib/common/trace.dart index d35568ea..6129a779 100644 --- a/packages/pinball_components/sandbox/lib/common/trace.dart +++ b/packages/pinball_components/sandbox/lib/common/trace.dart @@ -35,7 +35,7 @@ mixin Traceable on Forge2DGame { .forEach((bodyComponent) => bodyComponent.trace()); descendants() - .whereType() + .whereType() .forEach((sprite) => sprite.setOpacity(0.5)); } } diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 73ae296c..8709d694 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -16,9 +16,6 @@ void main() { addLayerStories(dashbook); addEffectsStories(dashbook); addFlipperStories(dashbook); - addSpaceshipStories(dashbook); - addSpaceshipRampStories(dashbook); - addSpaceshipRailStories(dashbook); addBaseboardStories(dashbook); addChromeDinoStories(dashbook); addDashNestBumperStories(dashbook); @@ -27,7 +24,6 @@ void main() { addSlingshotStories(dashbook); addSparkyBumperStories(dashbook); addAlienZoneStories(dashbook); - addZoomStories(dashbook); addBoundariesStories(dashbook); addGoogleWordStories(dashbook); addLaunchRampStories(dashbook); diff --git a/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_a_game.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_a_game.dart index fec10fe0..4832a468 100644 --- a/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_a_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_a_game.dart @@ -4,10 +4,17 @@ import 'package:flame/extensions.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class AlienBumperAGame extends BasicBallGame { - AlienBumperAGame() : super(color: const Color(0xFF0000FF)); - - static const info = ''' +class AlienBumperAGame extends BallGame { + AlienBumperAGame() + : super( + color: const Color(0xFF0000FF), + imagesFileNames: [ + Assets.images.alienBumper.a.active.keyName, + Assets.images.alienBumper.a.inactive.keyName, + ], + ); + + static const description = ''' Shows how a AlienBumperA is rendered. - Activate the "trace" parameter to overlay the body. @@ -17,16 +24,10 @@ class AlienBumperAGame extends BasicBallGame { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.alienBumper.a.active.keyName, - Assets.images.alienBumper.a.inactive.keyName, - ]); - - final center = screenToWorld(camera.viewport.canvasSize! / 2); - final alienBumperA = AlienBumper.a() - ..initialPosition = Vector2(center.x - 20, center.y - 20) - ..priority = 1; - await add(alienBumperA); + camera.followVector2(Vector2.zero()); + await add( + AlienBumper.a()..priority = 1, + ); await traceAllBodies(); } diff --git a/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_b_game.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_b_game.dart index 0218127b..abb206ca 100644 --- a/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_b_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/alien_bumper_b_game.dart @@ -4,10 +4,17 @@ import 'package:flame/extensions.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class AlienBumperBGame extends BasicBallGame { - AlienBumperBGame() : super(color: const Color(0xFF0000FF)); - - static const info = ''' +class AlienBumperBGame extends BallGame { + AlienBumperBGame() + : super( + color: const Color(0xFF0000FF), + imagesFileNames: [ + Assets.images.alienBumper.b.active.keyName, + Assets.images.alienBumper.b.inactive.keyName, + ], + ); + + static const description = ''' Shows how a AlienBumperB is rendered. - Activate the "trace" parameter to overlay the body. @@ -17,16 +24,10 @@ class AlienBumperBGame extends BasicBallGame { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.alienBumper.b.active.keyName, - Assets.images.alienBumper.b.inactive.keyName, - ]); - - final center = screenToWorld(camera.viewport.canvasSize! / 2); - final alienBumperB = AlienBumper.b() - ..initialPosition = Vector2(center.x - 10, center.y + 10) - ..priority = 1; - await add(alienBumperB); + camera.followVector2(Vector2.zero()); + await add( + AlienBumper.b()..priority = 1, + ); await traceAllBodies(); } diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_game.dart similarity index 79% rename from packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart rename to packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_game.dart index 6c00f476..ad897dd4 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_game.dart @@ -6,8 +6,8 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/common/common.dart'; -class BasicSpaceshipGame extends BasicGame with TapDetector { - static const info = ''' +class SpaceshipGame extends AssetsGame with TapDetector { + static const description = ''' Shows how a Spaceship works. - Tap anywhere on the screen to spawn a Ball into the game. @@ -18,10 +18,10 @@ class BasicSpaceshipGame extends BasicGame with TapDetector { await super.onLoad(); camera.followVector2(Vector2.zero()); - - unawaited( - addFromBlueprint(Spaceship(position: Vector2.zero())), + await addFromBlueprint( + Spaceship(position: Vector2.zero()), ); + await ready(); } @override diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_rail_game.dart similarity index 82% rename from packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart rename to packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_rail_game.dart index 471333c3..2a13fb5e 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_rail_game.dart @@ -6,7 +6,7 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SpaceshipRailGame extends BasicBallGame { +class SpaceshipRailGame extends BallGame { SpaceshipRailGame() : super( color: Colors.blue, @@ -14,7 +14,7 @@ class SpaceshipRailGame extends BasicBallGame { ballLayer: Layer.spaceshipExitRail, ); - static const info = ''' + static const description = ''' Shows how SpaceshipRail are rendered. - Activate the "trace" parameter to overlay the body. @@ -26,10 +26,8 @@ class SpaceshipRailGame extends BasicBallGame { await super.onLoad(); camera.followVector2(Vector2(-30, -10)); - - final spaceshipRail = SpaceshipRail(); - unawaited(addFromBlueprint(spaceshipRail)); - + await addFromBlueprint(SpaceshipRail()); + await ready(); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_ramp_game.dart similarity index 59% rename from packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart rename to packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_ramp_game.dart index f259b28b..1817f40a 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/spaceship_ramp_game.dart @@ -7,15 +7,27 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SpaceshipRampGame extends BasicBallGame with KeyboardEvents { +class SpaceshipRampGame extends BallGame with KeyboardEvents { SpaceshipRampGame() : super( color: Colors.blue, ballPriority: RenderPriority.ballOnSpaceshipRamp, ballLayer: Layer.spaceshipEntranceRamp, + imagesFileNames: [ + Assets.images.spaceship.ramp.railingBackground.keyName, + Assets.images.spaceship.ramp.main.keyName, + Assets.images.spaceship.ramp.boardOpening.keyName, + Assets.images.spaceship.ramp.railingForeground.keyName, + Assets.images.spaceship.ramp.arrow.inactive.keyName, + Assets.images.spaceship.ramp.arrow.active1.keyName, + Assets.images.spaceship.ramp.arrow.active2.keyName, + Assets.images.spaceship.ramp.arrow.active3.keyName, + Assets.images.spaceship.ramp.arrow.active4.keyName, + Assets.images.spaceship.ramp.arrow.active5.keyName, + ], ); - static const info = ''' + static const description = ''' Shows how SpaceshipRamp is rendered. - Activate the "trace" parameter to overlay the body. @@ -29,22 +41,10 @@ class SpaceshipRampGame extends BasicBallGame with KeyboardEvents { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.spaceship.ramp.railingBackground.keyName, - Assets.images.spaceship.ramp.main.keyName, - Assets.images.spaceship.ramp.boardOpening.keyName, - Assets.images.spaceship.ramp.railingForeground.keyName, - Assets.images.spaceship.ramp.arrow.inactive.keyName, - Assets.images.spaceship.ramp.arrow.active1.keyName, - Assets.images.spaceship.ramp.arrow.active2.keyName, - Assets.images.spaceship.ramp.arrow.active3.keyName, - Assets.images.spaceship.ramp.arrow.active4.keyName, - Assets.images.spaceship.ramp.arrow.active5.keyName, - ]); - - _spaceshipRamp = SpaceshipRamp(); - await addFromBlueprint(_spaceshipRamp); camera.followVector2(Vector2(-12, -50)); + await addFromBlueprint( + _spaceshipRamp = SpaceshipRamp(), + ); await traceAllBodies(); } diff --git a/packages/pinball_components/sandbox/lib/stories/alien_zone/stories.dart b/packages/pinball_components/sandbox/lib/stories/alien_zone/stories.dart index 4bc758f9..b4e7c1b6 100644 --- a/packages/pinball_components/sandbox/lib/stories/alien_zone/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/alien_zone/stories.dart @@ -1,25 +1,36 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/alien_zone/alien_bumper_a_game.dart'; import 'package:sandbox/stories/alien_zone/alien_bumper_b_game.dart'; +import 'package:sandbox/stories/alien_zone/spaceship_game.dart'; +import 'package:sandbox/stories/alien_zone/spaceship_rail_game.dart'; +import 'package:sandbox/stories/alien_zone/spaceship_ramp_game.dart'; void addAlienZoneStories(Dashbook dashbook) { dashbook.storiesOf('Alien Zone') - ..add( - 'Alien Bumper A', - (context) => GameWidget( - game: AlienBumperAGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('alien_zone/alien_bumper_a.dart'), - info: AlienBumperAGame.info, + ..addGame( + title: 'Alien Bumper A', + description: AlienBumperAGame.description, + gameBuilder: (_) => AlienBumperAGame(), ) - ..add( - 'Alien Bumper B', - (context) => GameWidget( - game: AlienBumperBGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('alien_zone/alien_bumper_b.dart'), - info: AlienBumperAGame.info, + ..addGame( + title: 'Alien Bumper B', + description: AlienBumperBGame.description, + gameBuilder: (_) => AlienBumperBGame(), + ) + ..addGame( + title: 'Spaceship', + description: SpaceshipGame.description, + gameBuilder: (_) => SpaceshipGame(), + ) + ..addGame( + title: 'Spaceship Rail', + description: SpaceshipRailGame.description, + gameBuilder: (_) => SpaceshipRailGame(), + ) + ..addGame( + title: 'Spaceship Ramp', + description: SpaceshipRampGame.description, + gameBuilder: (_) => SpaceshipRampGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart index 691b1656..639a4b57 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart @@ -1,21 +1,22 @@ -import 'package:flame/components.dart'; +import 'package:flame/input.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart' hide Assets; import 'package:pinball_theme/pinball_theme.dart'; import 'package:sandbox/common/common.dart'; -class BackboardGameOverGame extends BasicKeyboardGame { - BackboardGameOverGame(this.score, this.character); +class BackboardGameOverGame extends AssetsGame + with HasKeyboardHandlerComponents { + BackboardGameOverGame(this.score, this.character) + : super( + imagesFileNames: characterIconPaths.values.toList(), + ); - static const info = ''' - Simple example showing the game over mode of the backboard. + static const description = ''' + Shows how the Backboard in game over mode is rendered. - Select a character to update the character icon. '''; - final int score; - final String character; - static final characterIconPaths = { 'Dash': Assets.images.dash.leaderboardIcon.keyName, 'Sparky': Assets.images.sparky.leaderboardIcon.keyName, @@ -23,14 +24,16 @@ class BackboardGameOverGame extends BasicKeyboardGame { 'Dino': Assets.images.dino.leaderboardIcon.keyName, }; + final int score; + + final String character; + @override Future onLoad() async { camera ..followVector2(Vector2.zero()) ..zoom = 5; - await images.loadAll(characterIconPaths.values.toList()); - await add( Backboard.gameOver( position: Vector2(0, 20), diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart index 71f5c09a..6da9206c 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart @@ -2,9 +2,14 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class BackboardWaitingGame extends BasicGame { - static const info = ''' - Simple example showing the waiting mode of the backboard. +class BackboardWaitingGame extends AssetsGame { + BackboardWaitingGame() + : super( + imagesFileNames: [], + ); + + static const description = ''' + Shows how the Backboard in waiting mode is rendered. '''; @override @@ -13,7 +18,8 @@ class BackboardWaitingGame extends BasicGame { ..followVector2(Vector2.zero()) ..zoom = 5; - final backboard = Backboard.waiting(position: Vector2(0, 20)); - await add(backboard); + await add( + Backboard.waiting(position: Vector2(0, 20)), + ); } } diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart index cc05ba4f..b8c85d10 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart @@ -1,32 +1,25 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/backboard/backboard_game_over_game.dart'; import 'package:sandbox/stories/backboard/backboard_waiting_game.dart'; void addBackboardStories(Dashbook dashbook) { dashbook.storiesOf('Backboard') - ..add( - 'Waiting mode', - (context) => GameWidget( - game: BackboardWaitingGame(), - ), - codeLink: buildSourceLink('backboard/waiting.dart'), - info: BackboardWaitingGame.info, + ..addGame( + title: 'Waiting', + description: BackboardWaitingGame.description, + gameBuilder: (_) => BackboardWaitingGame(), ) - ..add( - 'Game over', - (context) => GameWidget( - game: BackboardGameOverGame( - context.numberProperty('Score', 9000000000).toInt(), - context.listProperty( - 'Character', - BackboardGameOverGame.characterIconPaths.keys.first, - BackboardGameOverGame.characterIconPaths.keys.toList(), - ), + ..addGame( + title: 'Game over', + description: BackboardGameOverGame.description, + gameBuilder: (context) => BackboardGameOverGame( + context.numberProperty('Score', 9000000000).toInt(), + context.listProperty( + 'Character', + BackboardGameOverGame.characterIconPaths.keys.first, + BackboardGameOverGame.characterIconPaths.keys.toList(), ), ), - codeLink: buildSourceLink('backboard/game_over.dart'), - info: BackboardGameOverGame.info, ); } diff --git a/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart b/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart index 2fa4462e..7f07de97 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart @@ -4,7 +4,7 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; class BallBoosterGame extends LineGame { - static const info = ''' + static const description = ''' Shows how a Ball with a boost works. - Drag to launch a boosted Ball. diff --git a/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart index 17bd0723..e57a0322 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart @@ -3,14 +3,20 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class BasicBallGame extends BasicGame with TapDetector, Traceable { - BasicBallGame({ +class BallGame extends AssetsGame with TapDetector, Traceable { + BallGame({ this.color = Colors.blue, this.ballPriority = 0, this.ballLayer = Layer.all, - }); + List? imagesFileNames, + }) : super( + imagesFileNames: [ + Assets.images.ball.ball.keyName, + if (imagesFileNames != null) ...imagesFileNames, + ], + ); - static const info = ''' + static const description = ''' Shows how a Ball works. - Tap anywhere on the screen to spawn a ball into the game. diff --git a/packages/pinball_components/sandbox/lib/stories/ball/stories.dart b/packages/pinball_components/sandbox/lib/stories/ball/stories.dart index 64892d22..eb472282 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/stories.dart @@ -1,5 +1,4 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/ball_booster_game.dart'; @@ -7,22 +6,16 @@ import 'package:sandbox/stories/ball/basic_ball_game.dart'; void addBallStories(Dashbook dashbook) { dashbook.storiesOf('Ball') - ..add( - 'Basic', - (context) => GameWidget( - game: BasicBallGame( - color: context.colorProperty('color', Colors.blue), - )..trace = context.boolProperty('Trace', true), + ..addGame( + title: 'Colored', + description: BallGame.description, + gameBuilder: (context) => BallGame( + color: context.colorProperty('color', Colors.blue), ), - codeLink: buildSourceLink('ball/basic.dart'), - info: BasicBallGame.info, ) - ..add( - 'Booster', - (context) => GameWidget( - game: BallBoosterGame(), - ), - codeLink: buildSourceLink('ball/ball_booster.dart'), - info: BallBoosterGame.info, + ..addGame( + title: 'Booster', + description: BallBoosterGame.description, + gameBuilder: (context) => BallBoosterGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard_game.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard_game.dart index 3dab5c6f..4e86f732 100644 --- a/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard_game.dart @@ -1,10 +1,17 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class BaseboardGame extends BasicBallGame with Traceable { - static const info = ''' +class BaseboardGame extends BallGame { + BaseboardGame() + : super( + imagesFileNames: [ + Assets.images.baseboard.left.keyName, + Assets.images.baseboard.right.keyName, + ], + ); + + static const description = ''' Shows how the Baseboards are rendered. - Activate the "trace" parameter to overlay the body. @@ -15,22 +22,14 @@ class BaseboardGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.baseboard.left.keyName, - Assets.images.baseboard.right.keyName, - ]); - final center = screenToWorld(camera.viewport.canvasSize! / 2); - final leftBaseboard = Baseboard(side: BoardSide.left) - ..initialPosition = center - Vector2(25, 0) - ..priority = 1; - final rightBaseboard = Baseboard(side: BoardSide.right) - ..initialPosition = center + Vector2(25, 0) - ..priority = 1; - await addAll([ - leftBaseboard, - rightBaseboard, + Baseboard(side: BoardSide.left) + ..initialPosition = center - Vector2(25, 0) + ..priority = 1, + Baseboard(side: BoardSide.right) + ..initialPosition = center + Vector2(25, 0) + ..priority = 1, ]); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart index 2e4d3090..b07e3a73 100644 --- a/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/baseboard/baseboard_game.dart'; void addBaseboardStories(Dashbook dashbook) { - dashbook.storiesOf('Baseboard').add( - 'Basic', - (context) => GameWidget( - game: BaseboardGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('baseboard_game/basic.dart'), - info: BaseboardGame.info, + dashbook.storiesOf('Baseboard').addGame( + title: 'Traced', + description: BaseboardGame.description, + gameBuilder: (_) => BaseboardGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart b/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart index 5ae1dd29..cf78750d 100644 --- a/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart @@ -1,11 +1,19 @@ import 'package:flame/extensions.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class BoundariesGame extends BasicBallGame with Traceable { - static const info = ''' +class BoundariesGame extends BallGame { + BoundariesGame() + : super( + imagesFileNames: [ + Assets.images.boundary.outer.keyName, + Assets.images.boundary.outerBottom.keyName, + Assets.images.boundary.bottom.keyName, + ], + ); + + static const description = ''' Shows how Boundaries are rendered. - Activate the "trace" parameter to overlay the body. @@ -16,19 +24,11 @@ class BoundariesGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.boundary.outer.keyName, - Assets.images.boundary.outerBottom.keyName, - Assets.images.boundary.bottom.keyName, - ]); - - await addFromBlueprint(Boundaries()); - await ready(); - camera ..followVector2(Vector2.zero()) ..zoom = 6; - + await addFromBlueprint(Boundaries()); + await ready(); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/boundaries/stories.dart b/packages/pinball_components/sandbox/lib/stories/boundaries/stories.dart index bebb0df7..02bb87b4 100644 --- a/packages/pinball_components/sandbox/lib/stories/boundaries/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/boundaries/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/boundaries/boundaries_game.dart'; void addBoundariesStories(Dashbook dashbook) { - dashbook.storiesOf('Boundaries').add( - 'Basic', - (context) => GameWidget( - game: BoundariesGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('boundaries_game/basic.dart'), - info: BoundariesGame.info, + dashbook.storiesOf('Boundaries').addGame( + title: 'Traced', + description: BoundariesGame.description, + gameBuilder: (_) => BoundariesGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart b/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart index 94bf6e44..2e6831e3 100644 --- a/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart @@ -2,7 +2,7 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; class ChromeDinoGame extends Forge2DGame { - static const info = 'Shows how a ChromeDino is rendered.'; + static const description = 'Shows how a ChromeDino is rendered.'; @override Future onLoad() async { diff --git a/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart b/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart index fb7c2ee1..391cdca7 100644 --- a/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/chrome_dino/chrome_dino_game.dart'; void addChromeDinoStories(Dashbook dashbook) { - dashbook.storiesOf('Chrome Dino').add( - 'Basic', - (context) => GameWidget( - game: ChromeDinoGame(), - ), - codeLink: buildSourceLink('chrome_dino/basic.dart'), - info: ChromeDinoGame.info, + dashbook.storiesOf('Chrome Dino').addGame( + title: 'Trace', + description: ChromeDinoGame.description, + gameBuilder: (_) => ChromeDinoGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/zoom/basic_zoom_game.dart b/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart similarity index 89% rename from packages/pinball_components/sandbox/lib/stories/zoom/basic_zoom_game.dart rename to packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart index f1c17fe9..11f2b776 100644 --- a/packages/pinball_components/sandbox/lib/stories/zoom/basic_zoom_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart @@ -3,8 +3,8 @@ import 'package:flame/input.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class BasicCameraZoomGame extends BasicGame with TapDetector { - static const info = ''' +class CameraZoomGame extends AssetsGame with TapDetector { + static const description = ''' Shows how CameraZoom can be used. - Tap to zoom in/out. diff --git a/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart b/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart index 9e2acaf4..3ca8ec1a 100644 --- a/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart @@ -3,7 +3,7 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; class FireEffectGame extends LineGame { - static const info = ''' + static const description = ''' Shows how the FireEffect renders. - Drag a line to define the trail direction. diff --git a/packages/pinball_components/sandbox/lib/stories/effects/stories.dart b/packages/pinball_components/sandbox/lib/stories/effects/stories.dart index 37ba434e..9b022987 100644 --- a/packages/pinball_components/sandbox/lib/stories/effects/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/stories.dart @@ -1,13 +1,18 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/effects/camera_zoom_game.dart'; import 'package:sandbox/stories/effects/fire_effect_game.dart'; void addEffectsStories(Dashbook dashbook) { - dashbook.storiesOf('Effects').add( - 'Fire Effect', - (context) => GameWidget(game: FireEffectGame()), - codeLink: buildSourceLink('effects/fire_effect.dart'), - info: FireEffectGame.info, - ); + dashbook.storiesOf('Effects') + ..addGame( + title: 'Fire', + description: FireEffectGame.description, + gameBuilder: (_) => FireEffectGame(), + ) + ..addGame( + title: 'CameraZoom', + description: CameraZoomGame.description, + gameBuilder: (_) => CameraZoomGame(), + ); } 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 40a638b9..789fa8b4 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/flipper_game.dart @@ -2,12 +2,19 @@ import 'package:flame/input.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; 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, Traceable { - static const info = ''' +class FlipperGame extends BallGame with KeyboardEvents { + FlipperGame() + : super( + imagesFileNames: [ + Assets.images.flipper.left.keyName, + Assets.images.flipper.right.keyName, + ], + ); + + static const description = ''' Shows how Flippers are rendered. - Activate the "trace" parameter to overlay the body. @@ -33,21 +40,12 @@ class FlipperGame extends BasicBallGame with KeyboardEvents, Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.flipper.left.keyName, - Assets.images.flipper.right.keyName, - ]); - final center = screenToWorld(camera.viewport.canvasSize! / 2); - - leftFlipper = Flipper(side: BoardSide.left) - ..initialPosition = center - Vector2(Flipper.size.x, 0); - rightFlipper = Flipper(side: BoardSide.right) - ..initialPosition = center + Vector2(Flipper.size.x, 0); - await addAll([ - leftFlipper, - rightFlipper, + leftFlipper = Flipper(side: BoardSide.left) + ..initialPosition = center - Vector2(Flipper.size.x, 0), + rightFlipper = Flipper(side: BoardSide.right) + ..initialPosition = center + Vector2(Flipper.size.x, 0), ]); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart b/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart index f8aa0075..2ef2a4b6 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/flipper/flipper_game.dart'; void addFlipperStories(Dashbook dashbook) { - dashbook.storiesOf('Flipper').add( - 'Basic', - (context) => GameWidget( - game: FlipperGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('flipper/basic.dart'), - info: FlipperGame.info, + dashbook.storiesOf('Flipper').addGame( + title: 'Traced', + description: FlipperGame.description, + gameBuilder: (_) => FlipperGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/big_dash_nest_bumper_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/big_dash_nest_bumper_game.dart index 1ccd7e8e..3580a175 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/big_dash_nest_bumper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/big_dash_nest_bumper_game.dart @@ -2,11 +2,18 @@ import 'dart:async'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class BigDashNestBumperGame extends BasicBallGame with Traceable { - static const info = ''' +class BigDashNestBumperGame extends BallGame { + BigDashNestBumperGame() + : super( + imagesFileNames: [ + Assets.images.dash.bumper.main.active.keyName, + Assets.images.dash.bumper.main.inactive.keyName, + ], + ); + + static const description = ''' Shows how a BigDashNestBumper is rendered. - Activate the "trace" parameter to overlay the body. @@ -16,13 +23,10 @@ class BigDashNestBumperGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.dash.bumper.main.active.keyName, - Assets.images.dash.bumper.main.inactive.keyName, - ]); - camera.followVector2(Vector2.zero()); - await add(DashNestBumper.main()..priority = 1); + await add( + DashNestBumper.main()..priority = 1, + ); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart index fd7ce93c..349dd811 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart @@ -2,11 +2,20 @@ import 'dart:async'; import 'package:flame/input.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SignpostGame extends BasicBallGame with Traceable, TapDetector { - static const info = ''' +class SignpostGame extends BallGame { + SignpostGame() + : super( + imagesFileNames: [ + Assets.images.signpost.inactive.keyName, + Assets.images.signpost.active1.keyName, + Assets.images.signpost.active2.keyName, + Assets.images.signpost.active3.keyName, + ], + ); + + static const description = ''' Shows how a Signpost is rendered. - Activate the "trace" parameter to overlay the body. @@ -17,13 +26,6 @@ class SignpostGame extends BasicBallGame with Traceable, TapDetector { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.signpost.inactive.keyName, - Assets.images.signpost.active1.keyName, - Assets.images.signpost.active2.keyName, - Assets.images.signpost.active3.keyName, - ]); - camera.followVector2(Vector2.zero()); await add(Signpost()); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_a_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_a_game.dart index b0a621fa..071f6aa1 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_a_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_a_game.dart @@ -2,11 +2,18 @@ import 'dart:async'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SmallDashNestBumperAGame extends BasicBallGame with Traceable { - static const info = ''' +class SmallDashNestBumperAGame extends BallGame { + SmallDashNestBumperAGame() + : super( + imagesFileNames: [ + Assets.images.dash.bumper.a.active.keyName, + Assets.images.dash.bumper.a.inactive.keyName, + ], + ); + + static const description = ''' Shows how a SmallDashNestBumper ("a") is rendered. - Activate the "trace" parameter to overlay the body. @@ -16,11 +23,6 @@ class SmallDashNestBumperAGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.dash.bumper.a.active.keyName, - Assets.images.dash.bumper.a.inactive.keyName, - ]); - camera.followVector2(Vector2.zero()); await add(DashNestBumper.a()..priority = 1); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_b_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_b_game.dart index 5512d4c9..a47b9962 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_b_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/small_dash_nest_bumper_b_game.dart @@ -2,11 +2,18 @@ import 'dart:async'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SmallDashNestBumperBGame extends BasicBallGame with Traceable { - static const info = ''' +class SmallDashNestBumperBGame extends BallGame { + SmallDashNestBumperBGame() + : super( + imagesFileNames: [ + Assets.images.dash.bumper.b.active.keyName, + Assets.images.dash.bumper.b.inactive.keyName, + ], + ); + + static const description = ''' Shows how a SmallDashNestBumper ("b") is rendered. - Activate the "trace" parameter to overlay the body. @@ -16,11 +23,6 @@ class SmallDashNestBumperBGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.dash.bumper.b.active.keyName, - Assets.images.dash.bumper.b.inactive.keyName, - ]); - camera.followVector2(Vector2.zero()); await add(DashNestBumper.b()..priority = 1); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/stories.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/stories.dart index a563a09a..ef9c1ffb 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/stories.dart @@ -1,5 +1,4 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/flutter_forest/big_dash_nest_bumper_game.dart'; import 'package:sandbox/stories/flutter_forest/signpost_game.dart'; @@ -8,39 +7,24 @@ import 'package:sandbox/stories/flutter_forest/small_dash_nest_bumper_b_game.dar void addDashNestBumperStories(Dashbook dashbook) { dashbook.storiesOf('Flutter Forest') - ..add( - 'Signpost', - (context) => GameWidget( - game: SignpostGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('flutter_forest/signpost.dart'), - info: SignpostGame.info, + ..addGame( + title: 'Signpost', + description: SignpostGame.description, + gameBuilder: (_) => SignpostGame(), ) - ..add( - 'Big Dash Nest Bumper', - (context) => GameWidget( - game: BigDashNestBumperGame() - ..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('flutter_forest/big_dash_nest_bumper.dart'), - info: BigDashNestBumperGame.info, + ..addGame( + title: 'Big Dash Nest Bumper', + description: BigDashNestBumperGame.description, + gameBuilder: (_) => BigDashNestBumperGame(), ) - ..add( - 'Small Dash Nest Bumper A', - (context) => GameWidget( - game: SmallDashNestBumperAGame() - ..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('flutter_forest/small_dash_nest_bumper_a.dart'), - info: SmallDashNestBumperAGame.info, + ..addGame( + title: 'Small Dash Nest Bumper A', + description: SmallDashNestBumperAGame.description, + gameBuilder: (_) => SmallDashNestBumperAGame(), ) - ..add( - 'Small Dash Nest Bumper B', - (context) => GameWidget( - game: SmallDashNestBumperBGame() - ..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('flutter_forest/small_dash_nest_bumper_b.dart'), - info: SmallDashNestBumperBGame.info, + ..addGame( + title: 'Small Dash Nest Bumper B', + description: SmallDashNestBumperBGame.description, + gameBuilder: (_) => SmallDashNestBumperBGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart b/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart index ad6e556b..d8022e57 100644 --- a/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class GoogleLetterGame extends BasicBallGame { +class GoogleLetterGame extends BallGame { GoogleLetterGame() : super(color: const Color(0xFF009900)); - static const info = ''' + static const description = ''' Shows how a GoogleLetter is rendered. - Tap anywhere on the screen to spawn a ball into the game. diff --git a/packages/pinball_components/sandbox/lib/stories/google_word/stories.dart b/packages/pinball_components/sandbox/lib/stories/google_word/stories.dart index 290bf9dd..858a9a30 100644 --- a/packages/pinball_components/sandbox/lib/stories/google_word/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/google_word/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/google_word/google_letter_game.dart'; void addGoogleWordStories(Dashbook dashbook) { - dashbook.storiesOf('Google Word').add( - 'Letter', - (context) => GameWidget( - game: GoogleLetterGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('google_word/letter.dart'), - info: GoogleLetterGame.info, + dashbook.storiesOf('Google Word').addGame( + title: 'Letter 0', + description: GoogleLetterGame.description, + gameBuilder: (_) => GoogleLetterGame(), ); } 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 add7b205..9b7d96cc 100644 --- a/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/kicker/kicker_game.dart @@ -1,10 +1,9 @@ import 'package:flame/extensions.dart'; 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 with Traceable { - static const info = ''' +class KickerGame extends BallGame { + static const description = ''' Shows how Kickers are rendered. - Activate the "trace" parameter to overlay the body. @@ -16,14 +15,14 @@ class KickerGame extends BasicBallGame with Traceable { await super.onLoad(); final center = screenToWorld(camera.viewport.canvasSize! / 2); - - final leftKicker = Kicker(side: BoardSide.left) - ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y); - await add(leftKicker); - - final rightKicker = Kicker(side: BoardSide.right) - ..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y); - await add(rightKicker); + await addAll( + [ + Kicker(side: BoardSide.left) + ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), + Kicker(side: BoardSide.right) + ..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y), + ], + ); await traceAllBodies(); } diff --git a/packages/pinball_components/sandbox/lib/stories/kicker/stories.dart b/packages/pinball_components/sandbox/lib/stories/kicker/stories.dart index 77d6ff29..cfebb7e4 100644 --- a/packages/pinball_components/sandbox/lib/stories/kicker/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/kicker/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/kicker/kicker_game.dart'; void addKickerStories(Dashbook dashbook) { - dashbook.storiesOf('Kickers').add( - 'Basic', - (context) => GameWidget( - game: KickerGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('kicker_game/basic.dart'), - info: KickerGame.info, + dashbook.storiesOf('Kickers').addGame( + title: 'Traced', + description: KickerGame.description, + gameBuilder: (_) => KickerGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart index 2d636e30..1be94133 100644 --- a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart @@ -6,7 +6,7 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class LaunchRampGame extends BasicBallGame { +class LaunchRampGame extends BallGame { LaunchRampGame() : super( color: Colors.blue, @@ -14,7 +14,7 @@ class LaunchRampGame extends BasicBallGame { ballLayer: Layer.launcher, ); - static const info = ''' + static const description = ''' Shows how LaunchRamp are rendered. - Activate the "trace" parameter to overlay the body. @@ -28,10 +28,8 @@ class LaunchRampGame extends BasicBallGame { camera ..followVector2(Vector2(0, 0)) ..zoom = 7.5; - - final launchRamp = LaunchRamp(); - unawaited(addFromBlueprint(launchRamp)); - + await addFromBlueprint(LaunchRamp()); + await ready(); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/launch_ramp/stories.dart b/packages/pinball_components/sandbox/lib/stories/launch_ramp/stories.dart index 083a4584..e02ec093 100644 --- a/packages/pinball_components/sandbox/lib/stories/launch_ramp/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/launch_ramp/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/launch_ramp/launch_ramp_game.dart'; void addLaunchRampStories(Dashbook dashbook) { - dashbook.storiesOf('LaunchRamp').add( - 'Basic', - (context) => GameWidget( - game: LaunchRampGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('launch_ramp/basic.dart'), - info: LaunchRampGame.info, + dashbook.storiesOf('LaunchRamp').addGame( + title: 'Traced', + description: LaunchRampGame.description, + gameBuilder: (_) => LaunchRampGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart b/packages/pinball_components/sandbox/lib/stories/layer/layer_game.dart similarity index 61% rename from packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart rename to packages/pinball_components/sandbox/lib/stories/layer/layer_game.dart index 60d72ff3..40dcc824 100644 --- a/packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/layer/layer_game.dart @@ -2,36 +2,35 @@ import 'package:flame/input.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class BasicLayerGame extends BasicGame with TapDetector { - BasicLayerGame({required this.color}); - - static const info = ''' +class LayerGame extends BallGame with TapDetector { + static const description = ''' Shows how Layers work when a Ball hits other components. - Tap anywhere on the screen to spawn a Ball into the game. '''; - final Color color; - @override Future onLoad() async { - await add(BigSquare()..initialPosition = Vector2(30, -40)); - await add(SmallSquare()..initialPosition = Vector2(50, -40)); - await add(UnlayeredSquare()..initialPosition = Vector2(60, -40)); - } - - @override - void onTapUp(TapUpInfo info) { - add( - Ball(baseColor: color)..initialPosition = info.eventPosition.game, + await addAll( + [ + _BigSquare()..initialPosition = Vector2(30, -40), + _SmallSquare()..initialPosition = Vector2(50, -40), + _UnlayeredSquare()..initialPosition = Vector2(60, -40), + ], ); } } -class BigSquare extends BodyComponent with InitialPosition, Layered { - BigSquare() { +class _BigSquare extends BodyComponent with InitialPosition, Layered { + _BigSquare() + : super( + children: [ + _UnlayeredSquare()..initialPosition = Vector2.all(4), + _SmallSquare()..initialPosition = Vector2.all(-4), + ], + ) { paint = Paint() ..color = const Color.fromARGB(255, 8, 218, 241) ..style = PaintingStyle.stroke; @@ -42,27 +41,13 @@ class BigSquare extends BodyComponent with InitialPosition, Layered { Body createBody() { final shape = PolygonShape()..setAsBoxXY(16, 16); final fixtureDef = FixtureDef(shape); - final bodyDef = BodyDef()..position = initialPosition; - return world.createBody(bodyDef)..createFixture(fixtureDef); } - - @override - Future onLoad() async { - await super.onLoad(); - - await addAll( - [ - UnlayeredSquare()..initialPosition = Vector2.all(4), - SmallSquare()..initialPosition = Vector2.all(-4), - ], - ); - } } -class SmallSquare extends BodyComponent with InitialPosition, Layered { - SmallSquare() { +class _SmallSquare extends BodyComponent with InitialPosition, Layered { + _SmallSquare() { paint = Paint() ..color = const Color.fromARGB(255, 27, 241, 8) ..style = PaintingStyle.stroke; @@ -73,15 +58,13 @@ class SmallSquare extends BodyComponent with InitialPosition, Layered { Body createBody() { final shape = PolygonShape()..setAsBoxXY(2, 2); final fixtureDef = FixtureDef(shape); - final bodyDef = BodyDef()..position = initialPosition; - return world.createBody(bodyDef)..createFixture(fixtureDef); } } -class UnlayeredSquare extends BodyComponent with InitialPosition { - UnlayeredSquare() { +class _UnlayeredSquare extends BodyComponent with InitialPosition { + _UnlayeredSquare() { paint = Paint() ..color = const Color.fromARGB(255, 241, 8, 8) ..style = PaintingStyle.stroke; @@ -91,9 +74,7 @@ class UnlayeredSquare extends BodyComponent with InitialPosition { Body createBody() { final shape = PolygonShape()..setAsBoxXY(3, 3); final fixtureDef = FixtureDef(shape); - final bodyDef = BodyDef()..position = initialPosition; - return world.createBody(bodyDef)..createFixture(fixtureDef); } } diff --git a/packages/pinball_components/sandbox/lib/stories/layer/stories.dart b/packages/pinball_components/sandbox/lib/stories/layer/stories.dart index 12ac028b..64d21b87 100644 --- a/packages/pinball_components/sandbox/lib/stories/layer/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/layer/stories.dart @@ -1,18 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; -import 'package:flutter/material.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/layer/basic_layer_game.dart'; +import 'package:sandbox/stories/layer/layer_game.dart'; void addLayerStories(Dashbook dashbook) { - dashbook.storiesOf('Layer').add( - 'Layer', - (context) => GameWidget( - game: BasicLayerGame( - color: context.colorProperty('color', Colors.blue), - ), - ), - codeLink: buildSourceLink('layer/basic.dart'), - info: BasicLayerGame.info, + dashbook.storiesOf('Layer').addGame( + title: 'Example', + description: LayerGame.description, + gameBuilder: (_) => LayerGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart index baaab21b..29eded8c 100644 --- a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart @@ -5,10 +5,10 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class PlungerGame extends BasicBallGame with KeyboardEvents, Traceable { +class PlungerGame extends BallGame with KeyboardEvents, Traceable { PlungerGame() : super(color: const Color(0xFFFF0000)); - static const info = ''' + static const description = ''' Shows how Plunger is rendered. - Activate the "trace" parameter to overlay the body. @@ -27,11 +27,10 @@ class PlungerGame extends BasicBallGame with KeyboardEvents, Traceable { await super.onLoad(); final center = screenToWorld(camera.viewport.canvasSize! / 2); - - plunger = Plunger(compressionDistance: 29) - ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y); - await add(plunger); - + await add( + plunger = Plunger(compressionDistance: 29) + ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), + ); await traceAllBodies(); } diff --git a/packages/pinball_components/sandbox/lib/stories/plunger/stories.dart b/packages/pinball_components/sandbox/lib/stories/plunger/stories.dart index 86061dc2..af54435a 100644 --- a/packages/pinball_components/sandbox/lib/stories/plunger/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/plunger/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/plunger/plunger_game.dart'; void addPlungerStories(Dashbook dashbook) { - dashbook.storiesOf('Plunger').add( - 'Basic', - (context) => GameWidget( - game: PlungerGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('plunger_game/basic.dart'), - info: PlungerGame.info, + dashbook.storiesOf('Plunger').addGame( + title: 'Traced', + description: PlungerGame.description, + gameBuilder: (_) => PlungerGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/score_text/basic.dart b/packages/pinball_components/sandbox/lib/stories/score_text/score_text_game.dart similarity index 88% rename from packages/pinball_components/sandbox/lib/stories/score_text/basic.dart rename to packages/pinball_components/sandbox/lib/stories/score_text/score_text_game.dart index 49b83863..aa776405 100644 --- a/packages/pinball_components/sandbox/lib/stories/score_text/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/score_text/score_text_game.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class ScoreTextBasicGame extends BasicGame with TapDetector { - static const info = ''' +class ScoreTextGame extends AssetsGame with TapDetector { + static const description = ''' Simple game to show how score text works, - Tap anywhere on the screen to spawn an text on the given location. diff --git a/packages/pinball_components/sandbox/lib/stories/score_text/stories.dart b/packages/pinball_components/sandbox/lib/stories/score_text/stories.dart index 85caef1b..c4899a27 100644 --- a/packages/pinball_components/sandbox/lib/stories/score_text/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/score_text/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/score_text/basic.dart'; +import 'package:sandbox/stories/score_text/score_text_game.dart'; void addScoreTextStories(Dashbook dashbook) { - dashbook.storiesOf('ScoreText').add( - 'Basic', - (context) => GameWidget( - game: ScoreTextBasicGame(), - ), - codeLink: buildSourceLink('score_text/basic.dart'), - info: ScoreTextBasicGame.info, + dashbook.storiesOf('ScoreText').addGame( + title: 'Basic', + description: ScoreTextGame.description, + gameBuilder: (_) => ScoreTextGame(), ); } 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 a0f54ea4..28858088 100644 --- a/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart @@ -1,11 +1,18 @@ import 'package:flame/extensions.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; -import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SlingshotGame extends BasicBallGame with Traceable { - static const info = ''' +class SlingshotGame extends BallGame { + SlingshotGame() + : super( + imagesFileNames: [ + Assets.images.slingshot.upper.keyName, + Assets.images.slingshot.lower.keyName, + ], + ); + + static const description = ''' Shows how Slingshots are rendered. - Activate the "trace" parameter to overlay the body. @@ -16,13 +23,9 @@ class SlingshotGame extends BasicBallGame with Traceable { Future onLoad() async { await super.onLoad(); - await images.loadAll([ - Assets.images.slingshot.upper.keyName, - Assets.images.slingshot.lower.keyName, - ]); - - await addFromBlueprint(Slingshots()); camera.followVector2(Vector2.zero()); + await addFromBlueprint(Slingshots()); + await ready(); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart b/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart index 70dfa021..e4c04a0f 100644 --- a/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/slingshot/slingshot_game.dart'; void addSlingshotStories(Dashbook dashbook) { - dashbook.storiesOf('Slingshots').add( - 'Basic', - (context) => GameWidget( - game: SlingshotGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('slingshot_game/basic.dart'), - info: SlingshotGame.info, + dashbook.storiesOf('Slingshots').addGame( + title: 'Traced', + description: SlingshotGame.description, + gameBuilder: (_) => SlingshotGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart b/packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart deleted file mode 100644 index ac7720a0..00000000 --- a/packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/spaceship/basic_spaceship_game.dart'; - -void addSpaceshipStories(Dashbook dashbook) { - dashbook.storiesOf('Spaceship').add( - 'Basic', - (context) => GameWidget( - game: BasicSpaceshipGame(), - ), - codeLink: buildSourceLink('spaceship/basic.dart'), - info: BasicSpaceshipGame.info, - ); -} diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/stories.dart b/packages/pinball_components/sandbox/lib/stories/spaceship_rail/stories.dart deleted file mode 100644 index e69ed1db..00000000 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/stories.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/spaceship_rail/spaceship_rail_game.dart'; - -void addSpaceshipRailStories(Dashbook dashbook) { - dashbook.storiesOf('SpaceshipRail').add( - 'Basic', - (context) => GameWidget( - game: SpaceshipRailGame() - ..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('spaceship_rail/basic.dart'), - info: SpaceshipRailGame.info, - ); -} diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/stories.dart b/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/stories.dart deleted file mode 100644 index f0aeadff..00000000 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/stories.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/spaceship_ramp/spaceship_ramp_game.dart'; - -void addSpaceshipRampStories(Dashbook dashbook) { - dashbook.storiesOf('SpaceshipRamp').add( - 'Basic', - (context) => GameWidget( - game: SpaceshipRampGame() - ..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('spaceship_ramp/basic.dart'), - info: SpaceshipRampGame.info, - ); -} 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 265b6246..9bebde9e 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 @@ -2,11 +2,10 @@ import 'dart:async'; import 'package:flame/extensions.dart'; 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 with Traceable { - static const info = ''' +class SparkyBumperGame extends BallGame { + static const description = ''' Shows how a SparkyBumper is rendered. - Activate the "trace" parameter to overlay the body. diff --git a/packages/pinball_components/sandbox/lib/stories/sparky_bumper/stories.dart b/packages/pinball_components/sandbox/lib/stories/sparky_bumper/stories.dart index 1a5f8801..418636db 100644 --- a/packages/pinball_components/sandbox/lib/stories/sparky_bumper/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/sparky_bumper/stories.dart @@ -1,15 +1,11 @@ import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/sparky_bumper/sparky_bumper_game.dart'; void addSparkyBumperStories(Dashbook dashbook) { - dashbook.storiesOf('Sparky Bumpers').add( - 'Basic', - (context) => GameWidget( - game: SparkyBumperGame()..trace = context.boolProperty('Trace', true), - ), - codeLink: buildSourceLink('sparky_bumper/basic.dart'), - info: SparkyBumperGame.info, + dashbook.storiesOf('Sparky Bumpers').addGame( + title: 'Traced', + description: SparkyBumperGame.description, + gameBuilder: (_) => SparkyBumperGame(), ); } diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 338ca384..90c38150 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -13,8 +13,4 @@ export 'layer/stories.dart'; export 'plunger/stories.dart'; export 'score_text/stories.dart'; export 'slingshot/stories.dart'; -export 'spaceship/stories.dart'; -export 'spaceship_rail/stories.dart'; -export 'spaceship_ramp/stories.dart'; export 'sparky_bumper/stories.dart'; -export 'zoom/stories.dart'; diff --git a/packages/pinball_components/sandbox/lib/stories/zoom/stories.dart b/packages/pinball_components/sandbox/lib/stories/zoom/stories.dart deleted file mode 100644 index 653d5491..00000000 --- a/packages/pinball_components/sandbox/lib/stories/zoom/stories.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:flame/game.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/zoom/basic_zoom_game.dart'; - -void addZoomStories(Dashbook dashbook) { - dashbook.storiesOf('CameraZoom').add( - 'Basic', - (context) => GameWidget( - game: BasicCameraZoomGame(), - ), - codeLink: buildSourceLink('zoom/basic_zoom_game.dart'), - info: BasicCameraZoomGame.info, - ); -}