refactor: move to package and test

pull/120/head
Allison Ryan 4 years ago
parent b136385d96
commit 0dd2dcc2eb

@ -6,7 +6,6 @@ export 'flipper_controller.dart';
export 'flutter_forest.dart';
export 'jetpack_ramp.dart';
export 'kicker.dart';
export 'launcher_ramp.dart';
export 'plunger.dart';
export 'score_points.dart';
export 'spaceship_exit_rail.dart';

@ -15,6 +15,10 @@ extension PinballGameAssetsX on PinballGame {
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,
),
images.load(Assets.images.components.background.path),
images.load(Assets.images.components.launchRamp.launchRamp.path),
images.load(Assets.images.components.launchRamp.launchRailFG.path),

@ -35,7 +35,7 @@ class PinballGame extends Forge2DGame
unawaited(add(Board()));
unawaited(_addPlunger());
unawaited(_addBonusWord());
unawaited(_addPaths());
unawaited(_addRamps());
unawaited(
addFromBlueprint(
Spaceship(
@ -86,9 +86,9 @@ class PinballGame extends Forge2DGame
);
}
Future<void> _addPaths() async {
Future<void> _addRamps() async {
unawaited(addFromBlueprint(Jetpack()));
unawaited(addFromBlueprint(Launcher()));
unawaited(addFromBlueprint(LaunchRamp()));
}
void spawnBall() {

@ -21,6 +21,9 @@ class $AssetsImagesGen {
AssetGenImage get flutterSignPost =>
const AssetGenImage('assets/images/flutter_sign_post.png');
$AssetsImagesLaunchRampGen get launchRamp =>
const $AssetsImagesLaunchRampGen();
/// File path: assets/images/spaceship_bridge.png
AssetGenImage get spaceshipBridge =>
const AssetGenImage('assets/images/spaceship_bridge.png');
@ -54,6 +57,18 @@ class $AssetsImagesFlipperGen {
const AssetGenImage('assets/images/flipper/right.png');
}
class $AssetsImagesLaunchRampGen {
const $AssetsImagesLaunchRampGen();
/// File path: assets/images/launch_ramp/foreground-railing.png
AssetGenImage get foregroundRailing =>
const AssetGenImage('assets/images/launch_ramp/foreground-railing.png');
/// File path: assets/images/launch_ramp/ramp.png
AssetGenImage get ramp =>
const AssetGenImage('assets/images/launch_ramp/ramp.png');
}
class Assets {
Assets._();

@ -7,6 +7,7 @@ export 'flipper.dart';
export 'flutter_sign_post.dart';
export 'initial_position.dart';
export 'joint_anchor.dart';
export 'launch_ramp.dart';
export 'layer.dart';
export 'ramp_opening.dart';
export 'shapes/shapes.dart';

@ -4,44 +4,43 @@ import 'dart:math' as math;
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/gen/assets.gen.dart';
import 'package:pinball_components/pinball_components.dart' hide Assets;
import 'package:pinball_components/pinball_components.dart';
/// {@template launcher}
/// A [Blueprint] which creates the [LauncherRamp] and
/// [LauncherForegroundRailing].
/// {@template launch_ramp}
/// A [Blueprint] which creates the [_LaunchRampBase] and
/// [_LaunchRampForegroundRailing].
/// {@endtemplate}
class Launcher extends Forge2DBlueprint {
class LaunchRamp extends Forge2DBlueprint {
@override
void build(_) {
addAllContactCallback([
RampOpeningBallContactCallback<_LauncherExit>(),
RampOpeningBallContactCallback<_LaunchRampExit>(),
]);
final launcherRamp = LauncherRamp()..layer = Layer.launcher;
final launchRampBase = _LaunchRampBase()..layer = Layer.launcher;
final launcherForegroundRailing = LauncherForegroundRailing()
final launchRampForegroundRailing = _LaunchRampForegroundRailing()
..layer = Layer.launcher;
final launcherExit = _LauncherExit(rotation: math.pi / 2)
final launchRampExit = _LaunchRampExit(rotation: math.pi / 2)
..initialPosition = Vector2(1.8, 34.2)
..layer = Layer.opening
..renderBody = false;
addAll([
launcherRamp,
launcherForegroundRailing,
launcherExit,
launchRampBase,
launchRampForegroundRailing,
launchRampExit,
]);
}
}
/// {@template launcher_ramp}
/// {@template launch_ramp_base}
/// Ramp the [Ball] is launched from at the beginning of each ball life.
/// {@endtemplate}
class LauncherRamp extends BodyComponent with InitialPosition, Layered {
/// {@macro launcher_ramp}
LauncherRamp() : super(priority: -1) {
class _LaunchRampBase extends BodyComponent with InitialPosition, Layered {
/// {@macro launch_ramp_base}
_LaunchRampBase() : super(priority: -1) {
layer = Layer.launcher;
}
@ -106,7 +105,7 @@ class LauncherRamp extends BodyComponent with InitialPosition, Layered {
await super.onLoad();
final sprite = await gameRef.loadSprite(
Assets.images.components.launchRamp.launchRamp.path,
Assets.images.launchRamp.ramp.keyName,
);
final spriteComponent = SpriteComponent(
sprite: sprite,
@ -133,13 +132,13 @@ class LauncherRamp extends BodyComponent with InitialPosition, Layered {
}
}
/// {@template launcher_foreground_railing}
/// Foreground railing for the [LauncherRamp] to render in front of the [Ball].
/// {@template launch_ramp_foreground_railing}
/// Foreground railing for the [_LaunchRampBase] to render in front of the [Ball].
/// {@endtemplate}
class LauncherForegroundRailing extends BodyComponent
class _LaunchRampForegroundRailing extends BodyComponent
with InitialPosition, Layered {
/// {@macro launcher_foreground_railing}
LauncherForegroundRailing() : super(priority: 4) {
/// {@macro launch_ramp_foreground_railing}
_LaunchRampForegroundRailing() : super(priority: 4) {
layer = Layer.launcher;
}
@ -179,7 +178,7 @@ class LauncherForegroundRailing extends BodyComponent
await super.onLoad();
final sprite = await gameRef.loadSprite(
Assets.images.components.launchRamp.launchRailFG.path,
Assets.images.launchRamp.foregroundRailing.keyName,
);
final spriteComponent = SpriteComponent(
sprite: sprite,
@ -207,13 +206,13 @@ class LauncherForegroundRailing extends BodyComponent
}
}
/// {@template launcher_exit}
/// {@template launch_ramp_exit}
/// [RampOpening] with [Layer.launcher] to filter [Ball]s exiting the
/// [Launcher].
/// [LaunchRamp].
/// {@endtemplate}
class _LauncherExit extends RampOpening {
/// {@macro launcher_exit}
_LauncherExit({
class _LaunchRampExit extends RampOpening {
/// {@macro launch_ramp_exit}
_LaunchRampExit({
required double rotation,
}) : _rotation = rotation,
super(

@ -28,6 +28,7 @@ flutter:
- assets/images/
- assets/images/baseboard/
- assets/images/flipper/
- assets/images/launch_ramp/
flutter_gen:
line_length: 80

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

@ -0,0 +1,30 @@
// ignore_for_file: cascade_invocations
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart';
import '../../helpers/helpers.dart';
void main() {
group('LaunchRamp', () {
final tester = FlameTester(TestGame.new);
tester.testGameWidget(
'renders correctly',
setUp: (game, tester) async {
await game.addFromBlueprint(LaunchRamp());
await game.ready();
game.camera.followVector2(Vector2.zero());
game.camera.zoom = 4.1;
},
verify: (game, tester) async {
await expectLater(
find.byGame<Forge2DGame>(),
matchesGoldenFile('golden/launch-ramp.png'),
);
},
);
});
}
Loading…
Cancel
Save