diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index 5c977d65..6bafe37e 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -13,8 +13,6 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.flipper.right.keyName), images.load(components.Assets.images.baseboard.left.keyName), images.load(components.Assets.images.baseboard.right.keyName), - images.load(components.Assets.images.spaceshipSaucer.keyName), - images.load(components.Assets.images.spaceshipBridge.keyName), images.load(components.Assets.images.launchRamp.ramp.keyName), images.load( components.Assets.images.launchRamp.foregroundRailing.keyName, @@ -29,16 +27,17 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.dashBumper.main.inactive.keyName), images.load(components.Assets.images.boundary.bottom.keyName), images.load(components.Assets.images.boundary.outer.keyName), - images.load(components.Assets.images.spaceshipRamp.spaceshipRamp.keyName), + images.load(components.Assets.images.spaceship.saucer.keyName), + images.load(components.Assets.images.spaceship.bridge.keyName), + images.load(components.Assets.images.spaceship.ramp.main.keyName), images.load( - components.Assets.images.spaceshipRamp.spaceshipRailingBg.keyName, + components.Assets.images.spaceship.ramp.railingBackground.keyName, ), images.load( - components.Assets.images.spaceshipRamp.spaceshipRailingFg.keyName, - ), - images.load( - components.Assets.images.spaceshipRamp.spaceshipDropTube.keyName, + components.Assets.images.spaceship.ramp.railingForeground.keyName, ), + images.load(components.Assets.images.spaceship.rail.main.keyName), + images.load(components.Assets.images.spaceship.rail.foreground.keyName), images.load(components.Assets.images.chromeDino.mouth.keyName), images.load(components.Assets.images.chromeDino.head.keyName), images.load(Assets.images.components.background.path), diff --git a/packages/pinball_components/assets/images/spaceship_bridge.png b/packages/pinball_components/assets/images/spaceship/bridge.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_bridge.png rename to packages/pinball_components/assets/images/spaceship/bridge.png diff --git a/packages/pinball_components/assets/images/spaceship/rail/foreground.png b/packages/pinball_components/assets/images/spaceship/rail/foreground.png new file mode 100644 index 00000000..4d11e865 Binary files /dev/null and b/packages/pinball_components/assets/images/spaceship/rail/foreground.png differ diff --git a/packages/pinball_components/assets/images/spaceship_ramp/spaceship_drop_tube.png b/packages/pinball_components/assets/images/spaceship/rail/main.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_ramp/spaceship_drop_tube.png rename to packages/pinball_components/assets/images/spaceship/rail/main.png diff --git a/packages/pinball_components/assets/images/spaceship_ramp/spaceship_ramp.png b/packages/pinball_components/assets/images/spaceship/ramp/main.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_ramp/spaceship_ramp.png rename to packages/pinball_components/assets/images/spaceship/ramp/main.png diff --git a/packages/pinball_components/assets/images/spaceship_ramp/spaceship_railing_bg.png b/packages/pinball_components/assets/images/spaceship/ramp/railing-background.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_ramp/spaceship_railing_bg.png rename to packages/pinball_components/assets/images/spaceship/ramp/railing-background.png diff --git a/packages/pinball_components/assets/images/spaceship_ramp/spaceship_railing_fg.png b/packages/pinball_components/assets/images/spaceship/ramp/railing-foreground.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_ramp/spaceship_railing_fg.png rename to packages/pinball_components/assets/images/spaceship/ramp/railing-foreground.png diff --git a/packages/pinball_components/assets/images/spaceship_saucer.png b/packages/pinball_components/assets/images/spaceship/saucer.png similarity index 100% rename from packages/pinball_components/assets/images/spaceship_saucer.png rename to packages/pinball_components/assets/images/spaceship/saucer.png diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 99dd9668..c928df79 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -28,17 +28,7 @@ class $AssetsImagesGen { $AssetsImagesLaunchRampGen get launchRamp => const $AssetsImagesLaunchRampGen(); - - /// File path: assets/images/spaceship_bridge.png - AssetGenImage get spaceshipBridge => - const AssetGenImage('assets/images/spaceship_bridge.png'); - - $AssetsImagesSpaceshipRampGen get spaceshipRamp => - const $AssetsImagesSpaceshipRampGen(); - - /// File path: assets/images/spaceship_saucer.png - AssetGenImage get spaceshipSaucer => - const AssetGenImage('assets/images/spaceship_saucer.png'); + $AssetsImagesSpaceshipGen get spaceship => const $AssetsImagesSpaceshipGen(); } class $AssetsImagesBaseboardGen { @@ -122,24 +112,21 @@ class $AssetsImagesLaunchRampGen { const AssetGenImage('assets/images/launch_ramp/ramp.png'); } -class $AssetsImagesSpaceshipRampGen { - const $AssetsImagesSpaceshipRampGen(); - - /// File path: assets/images/spaceship_ramp/spaceship_drop_tube.png - AssetGenImage get spaceshipDropTube => const AssetGenImage( - 'assets/images/spaceship_ramp/spaceship_drop_tube.png'); +class $AssetsImagesSpaceshipGen { + const $AssetsImagesSpaceshipGen(); - /// File path: assets/images/spaceship_ramp/spaceship_railing_bg.png - AssetGenImage get spaceshipRailingBg => const AssetGenImage( - 'assets/images/spaceship_ramp/spaceship_railing_bg.png'); + /// File path: assets/images/spaceship/bridge.png + AssetGenImage get bridge => + const AssetGenImage('assets/images/spaceship/bridge.png'); - /// File path: assets/images/spaceship_ramp/spaceship_railing_fg.png - AssetGenImage get spaceshipRailingFg => const AssetGenImage( - 'assets/images/spaceship_ramp/spaceship_railing_fg.png'); + $AssetsImagesSpaceshipRailGen get rail => + const $AssetsImagesSpaceshipRailGen(); + $AssetsImagesSpaceshipRampGen get ramp => + const $AssetsImagesSpaceshipRampGen(); - /// File path: assets/images/spaceship_ramp/spaceship_ramp.png - AssetGenImage get spaceshipRamp => - const AssetGenImage('assets/images/spaceship_ramp/spaceship_ramp.png'); + /// File path: assets/images/spaceship/saucer.png + AssetGenImage get saucer => + const AssetGenImage('assets/images/spaceship/saucer.png'); } class $AssetsImagesDashBumperAGen { @@ -178,6 +165,34 @@ class $AssetsImagesDashBumperMainGen { const AssetGenImage('assets/images/dash_bumper/main/inactive.png'); } +class $AssetsImagesSpaceshipRailGen { + const $AssetsImagesSpaceshipRailGen(); + + /// File path: assets/images/spaceship/rail/foreground.png + AssetGenImage get foreground => + const AssetGenImage('assets/images/spaceship/rail/foreground.png'); + + /// File path: assets/images/spaceship/rail/main.png + AssetGenImage get main => + const AssetGenImage('assets/images/spaceship/rail/main.png'); +} + +class $AssetsImagesSpaceshipRampGen { + const $AssetsImagesSpaceshipRampGen(); + + /// File path: assets/images/spaceship/ramp/main.png + AssetGenImage get main => + const AssetGenImage('assets/images/spaceship/ramp/main.png'); + + /// File path: assets/images/spaceship/ramp/railing-background.png + AssetGenImage get railingBackground => const AssetGenImage( + 'assets/images/spaceship/ramp/railing-background.png'); + + /// File path: assets/images/spaceship/ramp/railing-foreground.png + AssetGenImage get railingForeground => const AssetGenImage( + 'assets/images/spaceship/ramp/railing-foreground.png'); +} + class Assets { Assets._(); 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/lib/src/components/spaceship.dart b/packages/pinball_components/lib/src/components/spaceship.dart index d9f50653..f1b58db0 100644 --- a/packages/pinball_components/lib/src/components/spaceship.dart +++ b/packages/pinball_components/lib/src/components/spaceship.dart @@ -59,7 +59,7 @@ class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered { Future onLoad() async { await super.onLoad(); final sprite = await gameRef.loadSprite( - Assets.images.spaceshipSaucer.keyName, + Assets.images.spaceship.saucer.keyName, ); await add( @@ -106,7 +106,7 @@ class AndroidHead extends BodyComponent with InitialPosition, Layered { renderBody = false; final sprite = await gameRef.images.load( - Assets.images.spaceshipBridge.keyName, + Assets.images.spaceship.bridge.keyName, ); await add( diff --git a/packages/pinball_components/lib/src/components/spaceship_rail.dart b/packages/pinball_components/lib/src/components/spaceship_rail.dart index c881e8b3..ace12e61 100644 --- a/packages/pinball_components/lib/src/components/spaceship_rail.dart +++ b/packages/pinball_components/lib/src/components/spaceship_rail.dart @@ -23,18 +23,20 @@ class SpaceshipRail extends Forge2DBlueprint { SpaceshipRailExitBallContactCallback(), ]); - final exitRailRamp = _SpaceshipRailRamp(); - final exitRailEnd = SpaceshipRailExit(); + final railRamp = _SpaceshipRailRamp(); + final railEnd = SpaceshipRailExit(); final topBase = _SpaceshipRailBase(radius: 0.55) ..initialPosition = Vector2(-26.15, 18.65); final bottomBase = _SpaceshipRailBase(radius: 0.8) ..initialPosition = Vector2(-25.5, -12.9); + final railForeground = _SpaceshipRailForeground(); addAll([ - exitRailRamp, - exitRailEnd, + railRamp, + railEnd, topBase, bottomBase, + railForeground, ]); } } @@ -142,7 +144,7 @@ class _SpaceshipRailRamp extends BodyComponent with InitialPosition, Layered { Future _loadSprite() async { final sprite = await gameRef.loadSprite( - Assets.images.spaceshipRamp.spaceshipDropTube.keyName, + Assets.images.spaceship.rail.main.keyName, ); final spriteComponent = SpriteComponent( sprite: sprite, @@ -155,6 +157,26 @@ class _SpaceshipRailRamp extends BodyComponent with InitialPosition, Layered { } } +class _SpaceshipRailForeground extends SpriteComponent with HasGameRef { + _SpaceshipRailForeground() + : super( + anchor: Anchor.center, + position: Vector2(-28.5, 19.7), + priority: SpaceshipRail.ballPriorityWhenOnSpaceshipRail + 1, + ); + + @override + Future onLoad() async { + await super.onLoad(); + + final sprite = await gameRef.loadSprite( + Assets.images.spaceship.rail.foreground.keyName, + ); + this.sprite = sprite; + size = sprite.originalSize / 10; + } +} + /// Represents the ground bases of the [_SpaceshipRailRamp]. class _SpaceshipRailBase extends BodyComponent with InitialPosition, Layered { _SpaceshipRailBase({required this.radius}) @@ -200,9 +222,9 @@ class SpaceshipRailExit extends RampOpening { @override Shape get shape { return ArcShape( - center: Vector2(-29, -17.8), + center: Vector2(-28, -19), arcRadius: 2.5, - angle: math.pi * 0.8, + angle: math.pi * 0.4, rotation: -0.16, ); } diff --git a/packages/pinball_components/lib/src/components/spaceship_ramp.dart b/packages/pinball_components/lib/src/components/spaceship_ramp.dart index db9dbe85..6fb6cda0 100644 --- a/packages/pinball_components/lib/src/components/spaceship_ramp.dart +++ b/packages/pinball_components/lib/src/components/spaceship_ramp.dart @@ -116,7 +116,7 @@ class _SpaceshipRampBackground extends BodyComponent Future _loadSprites() async { final spriteRamp = await gameRef.loadSprite( - Assets.images.spaceshipRamp.spaceshipRamp.keyName, + Assets.images.spaceship.ramp.main.keyName, ); final spriteRampComponent = SpriteComponent( @@ -127,7 +127,7 @@ class _SpaceshipRampBackground extends BodyComponent ); final spriteRailingBg = await gameRef.loadSprite( - Assets.images.spaceshipRamp.spaceshipRailingBg.keyName, + Assets.images.spaceship.ramp.railingBackground.keyName, ); final spriteRailingBgComponent = SpriteComponent( sprite: spriteRailingBg, @@ -201,7 +201,7 @@ class _SpaceshipRampForegroundRailing extends BodyComponent Future _loadSprites() async { final spriteRailingFg = await gameRef.loadSprite( - Assets.images.spaceshipRamp.spaceshipRailingFg.keyName, + Assets.images.spaceship.ramp.railingForeground.keyName, ); final spriteRailingFgComponent = SpriteComponent( sprite: spriteRailingFg, diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index f513b054..0e5eb37a 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -34,7 +34,9 @@ flutter: - assets/images/dash_bumper/a/ - assets/images/dash_bumper/b/ - assets/images/dash_bumper/main/ - - assets/images/spaceship_ramp/ + - assets/images/spaceship/ + - assets/images/spaceship/rail/ + - assets/images/spaceship/ramp/ - assets/images/chrome_dino/ flutter_gen: 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';