mirror of https://github.com/flutter/pinball.git
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 algorithmpull/226/head
parent
e63d893a9c
commit
1f72dbfd4a
@ -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();
|
||||
}
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
export 'add_game.dart';
|
||||
export 'games.dart';
|
||||
export 'methods.dart';
|
||||
export 'trace.dart';
|
||||
|
@ -1,3 +0,0 @@
|
||||
String buildSourceLink(String path) {
|
||||
return 'https://github.com/VGVentures/pinball/tree/main/packages/pinball_components/sandbox/lib/stories/$path';
|
||||
}
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
Loading…
Reference in new issue