diff --git a/packages/pinball_components/lib/src/components/dash_nest_bumper.dart b/packages/pinball_components/lib/src/components/dash_nest_bumper.dart index a2b9b982..447b4156 100644 --- a/packages/pinball_components/lib/src/components/dash_nest_bumper.dart +++ b/packages/pinball_components/lib/src/components/dash_nest_bumper.dart @@ -67,6 +67,7 @@ class BigDashNestBumper extends DashNestBumper { inactiveAssetPath: Assets.images.dashBumper.main.inactive.keyName, spriteComponent: SpriteComponent( anchor: Anchor.center, + position: Vector2(0, -0.3), ), ); @@ -74,9 +75,9 @@ class BigDashNestBumper extends DashNestBumper { Body createBody() { final shape = EllipseShape( center: Vector2.zero(), - majorRadius: 4.85, - minorRadius: 3.95, - )..rotate(math.pi / 2); + majorRadius: 5.1, + minorRadius: 3.75, + )..rotate(math.pi / 2.1); final fixtureDef = FixtureDef(shape); final bodyDef = BodyDef() diff --git a/packages/pinball_components/sandbox/lib/common/common.dart b/packages/pinball_components/sandbox/lib/common/common.dart index 578c9b38..bb232e24 100644 --- a/packages/pinball_components/sandbox/lib/common/common.dart +++ b/packages/pinball_components/sandbox/lib/common/common.dart @@ -1,2 +1,3 @@ export 'games.dart'; export 'methods.dart'; +export 'trace.dart'; diff --git a/packages/pinball_components/sandbox/lib/common/trace.dart b/packages/pinball_components/sandbox/lib/common/trace.dart new file mode 100644 index 00000000..d64a5c6c --- /dev/null +++ b/packages/pinball_components/sandbox/lib/common/trace.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flutter/material.dart'; + +extension BodyTrace on BodyComponent { + void trace({Color color = const Color(0xFFFF0000)}) { + paint = Paint()..color = color; + renderBody = true; + + unawaited( + mounted.whenComplete(() { + final sprite = children.whereType().first; + sprite.paint.color = sprite.paint.color.withOpacity(0.5); + }), + ); + } +} diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 62ff7022..59066fca 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -6,7 +6,6 @@ // https://opensource.org/licenses/MIT. import 'package:dashbook/dashbook.dart'; import 'package:flutter/material.dart'; -import 'package:sandbox/stories/spaceship/spaceship.dart'; import 'package:sandbox/stories/stories.dart'; void main() { @@ -18,5 +17,7 @@ void main() { addFlipperStories(dashbook); addSpaceshipStories(dashbook); addBaseboardStories(dashbook); + addChromeDinoStories(dashbook); + addDashNestBumperStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/ball/ball_booster.dart b/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart similarity index 71% rename from packages/pinball_components/sandbox/lib/stories/ball/ball_booster.dart rename to packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart index 9f78953a..3b8fe149 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/ball_booster.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/ball_booster_game.dart @@ -3,8 +3,12 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class BallBoosterExample extends LineGame { - static const info = ''; +class BallBoosterGame extends LineGame { + static const info = ''' + Shows how a Ball with a boost works. + + Drag to launch a boosted Ball. +'''; @override void onLine(Vector2 line) { diff --git a/packages/pinball_components/sandbox/lib/stories/ball/basic.dart b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart similarity index 82% rename from packages/pinball_components/sandbox/lib/stories/ball/basic.dart rename to packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart index 73890519..46cfb154 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart @@ -7,9 +7,9 @@ class BasicBallGame extends BasicGame with TapDetector { BasicBallGame({required this.color}); static const info = ''' - Basic example of how a Ball works. + Shows how a Ball works. - Tap anywhere on the screen to spawn a ball into the game. + Tap anywhere on the screen to spawn a ball into the game. '''; final Color color; diff --git a/packages/pinball_components/sandbox/lib/stories/ball/ball.dart b/packages/pinball_components/sandbox/lib/stories/ball/stories.dart similarity index 76% rename from packages/pinball_components/sandbox/lib/stories/ball/ball.dart rename to packages/pinball_components/sandbox/lib/stories/ball/stories.dart index 35b29499..2e945c47 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/ball.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/stories.dart @@ -2,8 +2,8 @@ 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.dart'; -import 'package:sandbox/stories/ball/basic.dart'; +import 'package:sandbox/stories/ball/ball_booster_game.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; void addBallStories(Dashbook dashbook) { dashbook.storiesOf('Ball') @@ -20,9 +20,9 @@ void addBallStories(Dashbook dashbook) { ..add( 'Booster', (context) => GameWidget( - game: BallBoosterExample(), + game: BallBoosterGame(), ), codeLink: buildSourceLink('ball/ball_booster.dart'), - info: BallBoosterExample.info, + info: BallBoosterGame.info, ); } diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/basic_baseboard_game.dart similarity index 89% rename from packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart rename to packages/pinball_components/sandbox/lib/stories/baseboard/basic_baseboard_game.dart index 127c1dec..0650fa13 100644 --- a/packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/basic_baseboard_game.dart @@ -3,9 +3,7 @@ import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; class BasicBaseboardGame extends BasicGame { - static const info = ''' - Basic example of how a Baseboard works. -'''; + static const info = 'Shows how a Baseboard works.'; @override Future onLoad() async { diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart similarity index 85% rename from packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart rename to packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart index 96d89928..b3982af4 100644 --- a/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/stories.dart @@ -1,7 +1,7 @@ import 'package:dashbook/dashbook.dart'; import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/baseboard/basic.dart'; +import 'package:sandbox/stories/baseboard/basic_baseboard_game.dart'; void addBaseboardStories(Dashbook dashbook) { dashbook.storiesOf('Baseboard').add( 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 new file mode 100644 index 00000000..94bf6e44 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart @@ -0,0 +1,14 @@ +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.'; + + @override + Future onLoad() async { + await super.onLoad(); + + camera.followVector2(Vector2.zero()); + await add(ChromeDino()); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart b/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart new file mode 100644 index 00000000..fb7c2ee1 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart @@ -0,0 +1,15 @@ +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, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big_dash_nest_bumper_game.dart b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big_dash_nest_bumper_game.dart new file mode 100644 index 00000000..9638c36d --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big_dash_nest_bumper_game.dart @@ -0,0 +1,33 @@ +import 'dart:async'; +import 'dart:ui'; + +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 { + BigDashNestBumperGame({ + required this.trace, + }) : super(color: const Color(0xFF0000FF)); + + static const info = ''' + Shows how a BigDashNestBumper is rendered. + + Activate the "trace" parameter to overlay the body. +'''; + + final bool trace; + + @override + Future onLoad() async { + await super.onLoad(); + + final center = screenToWorld(camera.viewport.canvasSize! / 2); + final bigDashNestBumper = BigDashNestBumper() + ..initialPosition = center + ..priority = 1; + await add(bigDashNestBumper); + + if (trace) bigDashNestBumper.trace(); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/stories.dart b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/stories.dart new file mode 100644 index 00000000..95f3cd2a --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/stories.dart @@ -0,0 +1,18 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; +import 'package:sandbox/stories/dash_nest_bumper/big_dash_nest_bumper_game.dart'; + +void addDashNestBumperStories(Dashbook dashbook) { + dashbook.storiesOf('Dash Nest Bumpers').add( + 'Big', + (context) => GameWidget( + game: BigDashNestBumperGame( + trace: context.boolProperty('Trace', true), + ), + ), + codeLink: buildSourceLink('dash_nest_bumper/big.dart'), + info: BasicBallGame.info, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/effects/fire_effect.dart b/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart similarity index 83% rename from packages/pinball_components/sandbox/lib/stories/effects/fire_effect.dart rename to packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart index 1262af11..ecc22910 100644 --- a/packages/pinball_components/sandbox/lib/stories/effects/fire_effect.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/fire_effect_game.dart @@ -2,9 +2,12 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class FireEffectExample extends LineGame { - static const info = 'Demonstrate the fire trail effect ' - 'drag a line to define the trail direction'; +class FireEffectGame extends LineGame { + static const info = ''' + Shows how the FireEffect renders. + + Drag a line to define the trail direction. +'''; @override void onLine(Vector2 line) { diff --git a/packages/pinball_components/sandbox/lib/stories/effects/effects.dart b/packages/pinball_components/sandbox/lib/stories/effects/stories.dart similarity index 65% rename from packages/pinball_components/sandbox/lib/stories/effects/effects.dart rename to packages/pinball_components/sandbox/lib/stories/effects/stories.dart index 3a89c73b..37ba434e 100644 --- a/packages/pinball_components/sandbox/lib/stories/effects/effects.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/stories.dart @@ -1,13 +1,13 @@ import 'package:dashbook/dashbook.dart'; import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/effects/fire_effect.dart'; +import 'package:sandbox/stories/effects/fire_effect_game.dart'; void addEffectsStories(Dashbook dashbook) { dashbook.storiesOf('Effects').add( 'Fire Effect', - (context) => GameWidget(game: FireEffectExample()), + (context) => GameWidget(game: FireEffectGame()), codeLink: buildSourceLink('effects/fire_effect.dart'), - info: FireEffectExample.info, + info: FireEffectGame.info, ); } diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/basic.dart b/packages/pinball_components/sandbox/lib/stories/flipper/basic_flipper_game.dart similarity index 93% rename from packages/pinball_components/sandbox/lib/stories/flipper/basic.dart rename to packages/pinball_components/sandbox/lib/stories/flipper/basic_flipper_game.dart index d31515de..78959374 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/basic_flipper_game.dart @@ -3,14 +3,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:sandbox/stories/ball/basic.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; class BasicFlipperGame extends BasicBallGame with KeyboardEvents { BasicFlipperGame() : super(color: Colors.blue); - static const info = ''' - Basic example of how a Flipper works. -'''; + static const info = 'Shows how a Flipper works.'; static const _leftFlipperKeys = [ LogicalKeyboardKey.arrowLeft, diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/flipper_tracing_game.dart b/packages/pinball_components/sandbox/lib/stories/flipper/flipper_tracing_game.dart new file mode 100644 index 00000000..482440cb --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/flipper/flipper_tracing_game.dart @@ -0,0 +1,26 @@ +import 'dart:async'; + +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/flipper/basic_flipper_game.dart'; + +class FlipperTracingGame extends BasicFlipperGame { + static const info = ''' + Basic example of how the Flipper body overlays the sprite. +'''; + + @override + Future onLoad() async { + await super.onLoad(); + + leftFlipper.trace(); + leftFlipper.body.joints.whereType().forEach( + (joint) => joint.setLimits(0, 0), + ); + + rightFlipper.trace(); + rightFlipper.body.joints.whereType().forEach( + (joint) => joint.setLimits(0, 0), + ); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/flipper.dart b/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart similarity index 81% rename from packages/pinball_components/sandbox/lib/stories/flipper/flipper.dart rename to packages/pinball_components/sandbox/lib/stories/flipper/stories.dart index 7c8465da..3cad3ade 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/flipper.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/stories.dart @@ -1,8 +1,8 @@ import 'package:dashbook/dashbook.dart'; import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/flipper/basic.dart'; -import 'package:sandbox/stories/flipper/tracing.dart'; +import 'package:sandbox/stories/flipper/basic_flipper_game.dart'; +import 'package:sandbox/stories/flipper/flipper_tracing_game.dart'; void addFlipperStories(Dashbook dashbook) { dashbook.storiesOf('Flipper') diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart b/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart deleted file mode 100644 index 9b5802f8..00000000 --- a/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:async'; - -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/material.dart'; -import 'package:sandbox/stories/flipper/basic.dart'; - -class FlipperTracingGame extends BasicFlipperGame { - static const info = ''' - Basic example of how the Flipper body overlays the sprite. -'''; - - @override - Future onLoad() async { - await super.onLoad(); - leftFlipper.trace(); - rightFlipper.trace(); - } -} - -extension on BodyComponent { - void trace({Color color = Colors.red}) { - paint = Paint()..color = color; - renderBody = true; - body.joints.whereType().forEach( - (joint) => joint.setLimits(0, 0), - ); - - unawaited( - mounted.whenComplete(() { - final sprite = children.whereType().first; - sprite.paint.color = sprite.paint.color.withOpacity(0.5); - }), - ); - } -} diff --git a/packages/pinball_components/sandbox/lib/stories/layer/basic.dart b/packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart similarity index 94% rename from packages/pinball_components/sandbox/lib/stories/layer/basic.dart rename to packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart index f6993471..a6361094 100644 --- a/packages/pinball_components/sandbox/lib/stories/layer/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/layer/basic_layer_game.dart @@ -8,9 +8,9 @@ class BasicLayerGame extends BasicGame with TapDetector { BasicLayerGame({required this.color}); static const info = ''' - Basic example of how layers work when a Ball hits other components. + Shows how Layers work when a Ball hits other components. - Tap anywhere on the screen to spawn a ball into the game. + Tap anywhere on the screen to spawn a Ball into the game. '''; final Color color; diff --git a/packages/pinball_components/sandbox/lib/stories/layer/layer.dart b/packages/pinball_components/sandbox/lib/stories/layer/stories.dart similarity index 89% rename from packages/pinball_components/sandbox/lib/stories/layer/layer.dart rename to packages/pinball_components/sandbox/lib/stories/layer/stories.dart index 6d3538dd..12ac028b 100644 --- a/packages/pinball_components/sandbox/lib/stories/layer/layer.dart +++ b/packages/pinball_components/sandbox/lib/stories/layer/stories.dart @@ -2,7 +2,7 @@ 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.dart'; +import 'package:sandbox/stories/layer/basic_layer_game.dart'; void addLayerStories(Dashbook dashbook) { dashbook.storiesOf('Layer').add( diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship/basic.dart b/packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart similarity index 75% rename from packages/pinball_components/sandbox/lib/stories/spaceship/basic.dart rename to packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart index 0cfb4b5f..97124c3f 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/spaceship/basic_spaceship_game.dart @@ -5,9 +5,12 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; -class BasicSpaceship extends BasicGame with TapDetector { - static String info = 'Renders a spaceship and allows balls to be ' - 'spawned upon click to test their interactions'; +class BasicSpaceshipGame extends BasicGame with TapDetector { + static const info = ''' + Shows how a Spaceship works. + + Tap anywhere on the screen to spawn a Ball into the game. +'''; @override Future onLoad() async { diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship/spaceship.dart b/packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart similarity index 60% rename from packages/pinball_components/sandbox/lib/stories/spaceship/spaceship.dart rename to packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart index 635439ee..ac7720a0 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship/spaceship.dart +++ b/packages/pinball_components/sandbox/lib/stories/spaceship/stories.dart @@ -1,13 +1,15 @@ import 'package:dashbook/dashbook.dart'; import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/spaceship/basic.dart'; +import 'package:sandbox/stories/spaceship/basic_spaceship_game.dart'; void addSpaceshipStories(Dashbook dashbook) { dashbook.storiesOf('Spaceship').add( 'Basic', - (context) => GameWidget(game: BasicSpaceship()), + (context) => GameWidget( + game: BasicSpaceshipGame(), + ), codeLink: buildSourceLink('spaceship/basic.dart'), - info: BasicSpaceship.info, + info: BasicSpaceshipGame.info, ); } diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 90b93723..108cca05 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -1,5 +1,8 @@ -export 'ball/ball.dart'; -export 'baseboard/baseboard.dart'; -export 'effects/effects.dart'; -export 'flipper/flipper.dart'; -export 'layer/layer.dart'; +export 'ball/stories.dart'; +export 'baseboard/stories.dart'; +export 'chrome_dino/stories.dart'; +export 'dash_nest_bumper/stories.dart'; +export 'effects/stories.dart'; +export 'flipper/stories.dart'; +export 'layer/stories.dart'; +export 'spaceship/stories.dart';