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.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),

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -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._();

@ -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()

@ -59,7 +59,7 @@ class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered {
Future<void> 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(

@ -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<void> _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<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].
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,
);
}

@ -116,7 +116,7 @@ class _SpaceshipRampBackground extends BodyComponent
Future<void> _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<void> _loadSprites() async {
final spriteRailingFg = await gameRef.loadSprite(
Assets.images.spaceshipRamp.spaceshipRailingFg.keyName,
Assets.images.spaceship.ramp.railingForeground.keyName,
);
final spriteRailingFgComponent = SpriteComponent(
sprite: spriteRailingFg,

@ -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:

@ -1,2 +1,3 @@
export 'games.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.
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);
}

@ -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) {

@ -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;

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

@ -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<void> onLoad() async {

@ -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(

@ -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: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) {

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

@ -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,

@ -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: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')

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

@ -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(

@ -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<void> onLoad() async {

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

@ -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';

Loading…
Cancel
Save