Merge branch 'main' into feat/plunger_asset

pull/145/head
RuiAlonso 4 years ago
commit 766208572f

@ -13,8 +13,6 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.flipper.right.keyName), images.load(components.Assets.images.flipper.right.keyName),
images.load(components.Assets.images.baseboard.left.keyName), images.load(components.Assets.images.baseboard.left.keyName),
images.load(components.Assets.images.baseboard.right.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.ramp.keyName),
images.load( images.load(
components.Assets.images.launchRamp.foregroundRailing.keyName, 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.dashBumper.main.inactive.keyName),
images.load(components.Assets.images.boundary.bottom.keyName), images.load(components.Assets.images.boundary.bottom.keyName),
images.load(components.Assets.images.boundary.outer.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( images.load(
components.Assets.images.spaceshipRamp.spaceshipRailingBg.keyName, components.Assets.images.spaceship.ramp.railingBackground.keyName,
), ),
images.load( images.load(
components.Assets.images.spaceshipRamp.spaceshipRailingFg.keyName, components.Assets.images.spaceship.ramp.railingForeground.keyName,
),
images.load(
components.Assets.images.spaceshipRamp.spaceshipDropTube.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.mouth.keyName),
images.load(components.Assets.images.chromeDino.head.keyName), images.load(components.Assets.images.chromeDino.head.keyName),
images.load(Assets.images.components.background.path), images.load(Assets.images.components.background.path),

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -28,17 +28,7 @@ class $AssetsImagesGen {
$AssetsImagesLaunchRampGen get launchRamp => $AssetsImagesLaunchRampGen get launchRamp =>
const $AssetsImagesLaunchRampGen(); const $AssetsImagesLaunchRampGen();
$AssetsImagesSpaceshipGen get spaceship => const $AssetsImagesSpaceshipGen();
/// 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');
} }
class $AssetsImagesBaseboardGen { class $AssetsImagesBaseboardGen {
@ -122,24 +112,21 @@ class $AssetsImagesLaunchRampGen {
const AssetGenImage('assets/images/launch_ramp/ramp.png'); const AssetGenImage('assets/images/launch_ramp/ramp.png');
} }
class $AssetsImagesSpaceshipRampGen { class $AssetsImagesSpaceshipGen {
const $AssetsImagesSpaceshipRampGen(); const $AssetsImagesSpaceshipGen();
/// File path: assets/images/spaceship_ramp/spaceship_drop_tube.png
AssetGenImage get spaceshipDropTube => const AssetGenImage(
'assets/images/spaceship_ramp/spaceship_drop_tube.png');
/// File path: assets/images/spaceship_ramp/spaceship_railing_bg.png /// File path: assets/images/spaceship/bridge.png
AssetGenImage get spaceshipRailingBg => const AssetGenImage( AssetGenImage get bridge =>
'assets/images/spaceship_ramp/spaceship_railing_bg.png'); const AssetGenImage('assets/images/spaceship/bridge.png');
/// File path: assets/images/spaceship_ramp/spaceship_railing_fg.png $AssetsImagesSpaceshipRailGen get rail =>
AssetGenImage get spaceshipRailingFg => const AssetGenImage( const $AssetsImagesSpaceshipRailGen();
'assets/images/spaceship_ramp/spaceship_railing_fg.png'); $AssetsImagesSpaceshipRampGen get ramp =>
const $AssetsImagesSpaceshipRampGen();
/// File path: assets/images/spaceship_ramp/spaceship_ramp.png /// File path: assets/images/spaceship/saucer.png
AssetGenImage get spaceshipRamp => AssetGenImage get saucer =>
const AssetGenImage('assets/images/spaceship_ramp/spaceship_ramp.png'); const AssetGenImage('assets/images/spaceship/saucer.png');
} }
class $AssetsImagesDashBumperAGen { class $AssetsImagesDashBumperAGen {
@ -178,6 +165,34 @@ class $AssetsImagesDashBumperMainGen {
const AssetGenImage('assets/images/dash_bumper/main/inactive.png'); 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 { class Assets {
Assets._(); Assets._();

@ -67,6 +67,7 @@ class BigDashNestBumper extends DashNestBumper {
inactiveAssetPath: Assets.images.dashBumper.main.inactive.keyName, inactiveAssetPath: Assets.images.dashBumper.main.inactive.keyName,
spriteComponent: SpriteComponent( spriteComponent: SpriteComponent(
anchor: Anchor.center, anchor: Anchor.center,
position: Vector2(0, -0.3),
), ),
); );
@ -74,9 +75,9 @@ class BigDashNestBumper extends DashNestBumper {
Body createBody() { Body createBody() {
final shape = EllipseShape( final shape = EllipseShape(
center: Vector2.zero(), center: Vector2.zero(),
majorRadius: 4.85, majorRadius: 5.1,
minorRadius: 3.95, minorRadius: 3.75,
)..rotate(math.pi / 2); )..rotate(math.pi / 2.1);
final fixtureDef = FixtureDef(shape); final fixtureDef = FixtureDef(shape);
final bodyDef = BodyDef() final bodyDef = BodyDef()

@ -59,7 +59,7 @@ class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered {
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = await gameRef.loadSprite(
Assets.images.spaceshipSaucer.keyName, Assets.images.spaceship.saucer.keyName,
); );
await add( await add(
@ -106,7 +106,7 @@ class AndroidHead extends BodyComponent with InitialPosition, Layered {
renderBody = false; renderBody = false;
final sprite = await gameRef.images.load( final sprite = await gameRef.images.load(
Assets.images.spaceshipBridge.keyName, Assets.images.spaceship.bridge.keyName,
); );
await add( await add(

@ -23,18 +23,20 @@ class SpaceshipRail extends Forge2DBlueprint {
SpaceshipRailExitBallContactCallback(), SpaceshipRailExitBallContactCallback(),
]); ]);
final exitRailRamp = _SpaceshipRailRamp(); final railRamp = _SpaceshipRailRamp();
final exitRailEnd = SpaceshipRailExit(); final railEnd = SpaceshipRailExit();
final topBase = _SpaceshipRailBase(radius: 0.55) final topBase = _SpaceshipRailBase(radius: 0.55)
..initialPosition = Vector2(-26.15, 18.65); ..initialPosition = Vector2(-26.15, 18.65);
final bottomBase = _SpaceshipRailBase(radius: 0.8) final bottomBase = _SpaceshipRailBase(radius: 0.8)
..initialPosition = Vector2(-25.5, -12.9); ..initialPosition = Vector2(-25.5, -12.9);
final railForeground = _SpaceshipRailForeground();
addAll([ addAll([
exitRailRamp, railRamp,
exitRailEnd, railEnd,
topBase, topBase,
bottomBase, bottomBase,
railForeground,
]); ]);
} }
} }
@ -142,7 +144,7 @@ class _SpaceshipRailRamp extends BodyComponent with InitialPosition, Layered {
Future<void> _loadSprite() async { Future<void> _loadSprite() async {
final sprite = await gameRef.loadSprite( final sprite = await gameRef.loadSprite(
Assets.images.spaceshipRamp.spaceshipDropTube.keyName, Assets.images.spaceship.rail.main.keyName,
); );
final spriteComponent = SpriteComponent( final spriteComponent = SpriteComponent(
sprite: sprite, 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<void> 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]. /// Represents the ground bases of the [_SpaceshipRailRamp].
class _SpaceshipRailBase extends BodyComponent with InitialPosition, Layered { class _SpaceshipRailBase extends BodyComponent with InitialPosition, Layered {
_SpaceshipRailBase({required this.radius}) _SpaceshipRailBase({required this.radius})
@ -200,9 +222,9 @@ class SpaceshipRailExit extends RampOpening {
@override @override
Shape get shape { Shape get shape {
return ArcShape( return ArcShape(
center: Vector2(-29, -17.8), center: Vector2(-28, -19),
arcRadius: 2.5, arcRadius: 2.5,
angle: math.pi * 0.8, angle: math.pi * 0.4,
rotation: -0.16, rotation: -0.16,
); );
} }

@ -116,7 +116,7 @@ class _SpaceshipRampBackground extends BodyComponent
Future<void> _loadSprites() async { Future<void> _loadSprites() async {
final spriteRamp = await gameRef.loadSprite( final spriteRamp = await gameRef.loadSprite(
Assets.images.spaceshipRamp.spaceshipRamp.keyName, Assets.images.spaceship.ramp.main.keyName,
); );
final spriteRampComponent = SpriteComponent( final spriteRampComponent = SpriteComponent(
@ -127,7 +127,7 @@ class _SpaceshipRampBackground extends BodyComponent
); );
final spriteRailingBg = await gameRef.loadSprite( final spriteRailingBg = await gameRef.loadSprite(
Assets.images.spaceshipRamp.spaceshipRailingBg.keyName, Assets.images.spaceship.ramp.railingBackground.keyName,
); );
final spriteRailingBgComponent = SpriteComponent( final spriteRailingBgComponent = SpriteComponent(
sprite: spriteRailingBg, sprite: spriteRailingBg,
@ -201,7 +201,7 @@ class _SpaceshipRampForegroundRailing extends BodyComponent
Future<void> _loadSprites() async { Future<void> _loadSprites() async {
final spriteRailingFg = await gameRef.loadSprite( final spriteRailingFg = await gameRef.loadSprite(
Assets.images.spaceshipRamp.spaceshipRailingFg.keyName, Assets.images.spaceship.ramp.railingForeground.keyName,
); );
final spriteRailingFgComponent = SpriteComponent( final spriteRailingFgComponent = SpriteComponent(
sprite: spriteRailingFg, sprite: spriteRailingFg,

@ -34,7 +34,9 @@ flutter:
- assets/images/dash_bumper/a/ - assets/images/dash_bumper/a/
- assets/images/dash_bumper/b/ - assets/images/dash_bumper/b/
- assets/images/dash_bumper/main/ - assets/images/dash_bumper/main/
- assets/images/spaceship_ramp/ - assets/images/spaceship/
- assets/images/spaceship/rail/
- assets/images/spaceship/ramp/
- assets/images/chrome_dino/ - assets/images/chrome_dino/
flutter_gen: flutter_gen:

@ -1,2 +1,3 @@
export 'games.dart'; export 'games.dart';
export 'methods.dart'; export 'methods.dart';
export '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<SpriteComponent>().first;
sprite.paint.color = sprite.paint.color.withOpacity(0.5);
}),
);
}
}

@ -6,7 +6,6 @@
// https://opensource.org/licenses/MIT. // https://opensource.org/licenses/MIT.
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sandbox/stories/spaceship/spaceship.dart';
import 'package:sandbox/stories/stories.dart'; import 'package:sandbox/stories/stories.dart';
void main() { void main() {
@ -18,5 +17,7 @@ void main() {
addFlipperStories(dashbook); addFlipperStories(dashbook);
addSpaceshipStories(dashbook); addSpaceshipStories(dashbook);
addBaseboardStories(dashbook); addBaseboardStories(dashbook);
addChromeDinoStories(dashbook);
addDashNestBumperStories(dashbook);
runApp(dashbook); runApp(dashbook);
} }

@ -3,8 +3,12 @@ import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class BallBoosterExample extends LineGame { class BallBoosterGame extends LineGame {
static const info = ''; static const info = '''
Shows how a Ball with a boost works.
Drag to launch a boosted Ball.
''';
@override @override
void onLine(Vector2 line) { void onLine(Vector2 line) {

@ -7,7 +7,7 @@ class BasicBallGame extends BasicGame with TapDetector {
BasicBallGame({required this.color}); BasicBallGame({required this.color});
static const info = ''' 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.
'''; ''';

@ -2,8 +2,8 @@ import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/ball_booster.dart'; import 'package:sandbox/stories/ball/ball_booster_game.dart';
import 'package:sandbox/stories/ball/basic.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
void addBallStories(Dashbook dashbook) { void addBallStories(Dashbook dashbook) {
dashbook.storiesOf('Ball') dashbook.storiesOf('Ball')
@ -20,9 +20,9 @@ void addBallStories(Dashbook dashbook) {
..add( ..add(
'Booster', 'Booster',
(context) => GameWidget( (context) => GameWidget(
game: BallBoosterExample(), game: BallBoosterGame(),
), ),
codeLink: buildSourceLink('ball/ball_booster.dart'), codeLink: buildSourceLink('ball/ball_booster.dart'),
info: BallBoosterExample.info, info: BallBoosterGame.info,
); );
} }

@ -3,9 +3,7 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class BasicBaseboardGame extends BasicGame { class BasicBaseboardGame extends BasicGame {
static const info = ''' static const info = 'Shows how a Baseboard works.';
Basic example of how a Baseboard works.
''';
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {

@ -1,7 +1,7 @@
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:sandbox/common/common.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) { void addBaseboardStories(Dashbook dashbook) {
dashbook.storiesOf('Baseboard').add( dashbook.storiesOf('Baseboard').add(

@ -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<void> onLoad() async {
await super.onLoad();
camera.followVector2(Vector2.zero());
await add(ChromeDino());
}
}

@ -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,
);
}

@ -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<void> 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();
}
}

@ -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,
);
}

@ -2,9 +2,12 @@ import 'package:flame/components.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class FireEffectExample extends LineGame { class FireEffectGame extends LineGame {
static const info = 'Demonstrate the fire trail effect ' static const info = '''
'drag a line to define the trail direction'; Shows how the FireEffect renders.
Drag a line to define the trail direction.
''';
@override @override
void onLine(Vector2 line) { void onLine(Vector2 line) {

@ -1,13 +1,13 @@
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:sandbox/common/common.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) { void addEffectsStories(Dashbook dashbook) {
dashbook.storiesOf('Effects').add( dashbook.storiesOf('Effects').add(
'Fire Effect', 'Fire Effect',
(context) => GameWidget(game: FireEffectExample()), (context) => GameWidget(game: FireEffectGame()),
codeLink: buildSourceLink('effects/fire_effect.dart'), codeLink: buildSourceLink('effects/fire_effect.dart'),
info: FireEffectExample.info, info: FireEffectGame.info,
); );
} }

@ -3,14 +3,12 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:pinball_components/pinball_components.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 { class BasicFlipperGame extends BasicBallGame with KeyboardEvents {
BasicFlipperGame() : super(color: Colors.blue); BasicFlipperGame() : super(color: Colors.blue);
static const info = ''' static const info = 'Shows how a Flipper works.';
Basic example of how a Flipper works.
''';
static const _leftFlipperKeys = [ static const _leftFlipperKeys = [
LogicalKeyboardKey.arrowLeft, LogicalKeyboardKey.arrowLeft,

@ -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<void> onLoad() async {
await super.onLoad();
leftFlipper.trace();
leftFlipper.body.joints.whereType<RevoluteJoint>().forEach(
(joint) => joint.setLimits(0, 0),
);
rightFlipper.trace();
rightFlipper.body.joints.whereType<RevoluteJoint>().forEach(
(joint) => joint.setLimits(0, 0),
);
}
}

@ -1,8 +1,8 @@
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/flipper/basic.dart'; import 'package:sandbox/stories/flipper/basic_flipper_game.dart';
import 'package:sandbox/stories/flipper/tracing.dart'; import 'package:sandbox/stories/flipper/flipper_tracing_game.dart';
void addFlipperStories(Dashbook dashbook) { void addFlipperStories(Dashbook dashbook) {
dashbook.storiesOf('Flipper') dashbook.storiesOf('Flipper')

@ -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<void> 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<RevoluteJoint>().forEach(
(joint) => joint.setLimits(0, 0),
);
unawaited(
mounted.whenComplete(() {
final sprite = children.whereType<SpriteComponent>().first;
sprite.paint.color = sprite.paint.color.withOpacity(0.5);
}),
);
}
}

@ -8,9 +8,9 @@ class BasicLayerGame extends BasicGame with TapDetector {
BasicLayerGame({required this.color}); BasicLayerGame({required this.color});
static const info = ''' 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; final Color color;

@ -2,7 +2,7 @@ import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sandbox/common/common.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) { void addLayerStories(Dashbook dashbook) {
dashbook.storiesOf('Layer').add( dashbook.storiesOf('Layer').add(

@ -5,9 +5,12 @@ import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class BasicSpaceship extends BasicGame with TapDetector { class BasicSpaceshipGame extends BasicGame with TapDetector {
static String info = 'Renders a spaceship and allows balls to be ' static const info = '''
'spawned upon click to test their interactions'; Shows how a Spaceship works.
Tap anywhere on the screen to spawn a Ball into the game.
''';
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {

@ -1,13 +1,15 @@
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:sandbox/common/common.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) { void addSpaceshipStories(Dashbook dashbook) {
dashbook.storiesOf('Spaceship').add( dashbook.storiesOf('Spaceship').add(
'Basic', 'Basic',
(context) => GameWidget(game: BasicSpaceship()), (context) => GameWidget(
game: BasicSpaceshipGame(),
),
codeLink: buildSourceLink('spaceship/basic.dart'), codeLink: buildSourceLink('spaceship/basic.dart'),
info: BasicSpaceship.info, info: BasicSpaceshipGame.info,
); );
} }

@ -1,5 +1,8 @@
export 'ball/ball.dart'; export 'ball/stories.dart';
export 'baseboard/baseboard.dart'; export 'baseboard/stories.dart';
export 'effects/effects.dart'; export 'chrome_dino/stories.dart';
export 'flipper/flipper.dart'; export 'dash_nest_bumper/stories.dart';
export 'layer/layer.dart'; export 'effects/stories.dart';
export 'flipper/stories.dart';
export 'layer/stories.dart';
export 'spaceship/stories.dart';

Loading…
Cancel
Save