refactor: add spaceship rail assets (#244)

* refactor: update rail assets and shape

* fix: add assets to newly merged test
pull/260/head
Allison Ryan 3 years ago committed by GitHub
parent 4524849c29
commit 8e9ef85dda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -76,7 +76,7 @@ extension PinballGameAssetsX on PinballGame {
components.Assets.images.spaceship.ramp.arrow.active5.keyName, components.Assets.images.spaceship.ramp.arrow.active5.keyName,
), ),
images.load(components.Assets.images.spaceship.rail.main.keyName), images.load(components.Assets.images.spaceship.rail.main.keyName),
images.load(components.Assets.images.spaceship.rail.foreground.keyName), images.load(components.Assets.images.spaceship.rail.exit.keyName),
images.load(components.Assets.images.androidBumper.a.lit.keyName), images.load(components.Assets.images.androidBumper.a.lit.keyName),
images.load(components.Assets.images.androidBumper.a.dimmed.keyName), images.load(components.Assets.images.androidBumper.a.dimmed.keyName),
images.load(components.Assets.images.androidBumper.b.lit.keyName), images.load(components.Assets.images.androidBumper.b.lit.keyName),

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 61 KiB

@ -307,9 +307,9 @@ class $AssetsImagesDashBumperGen {
class $AssetsImagesSpaceshipRailGen { class $AssetsImagesSpaceshipRailGen {
const $AssetsImagesSpaceshipRailGen(); const $AssetsImagesSpaceshipRailGen();
/// File path: assets/images/spaceship/rail/foreground.png /// File path: assets/images/spaceship/rail/exit.png
AssetGenImage get foreground => AssetGenImage get exit =>
const AssetGenImage('assets/images/spaceship/rail/foreground.png'); const AssetGenImage('assets/images/spaceship/rail/exit.png');
/// File path: assets/images/spaceship/rail/main.png /// File path: assets/images/spaceship/rail/main.png
AssetGenImage get main => AssetGenImage get main =>

@ -24,7 +24,7 @@ abstract class RenderPriority {
static const int ballOnSpaceship = _above + spaceshipSaucer; static const int ballOnSpaceship = _above + spaceshipSaucer;
/// Render priority for the [Ball] while it's on the [SpaceshipRail]. /// Render priority for the [Ball] while it's on the [SpaceshipRail].
static const int ballOnSpaceshipRail = _below + spaceshipSaucer; static const int ballOnSpaceshipRail = _above + spaceshipRail;
/// Render priority for the [Ball] while it's on the [LaunchRamp]. /// Render priority for the [Ball] while it's on the [LaunchRamp].
static const int ballOnLaunchRamp = _above + launchRamp; static const int ballOnLaunchRamp = _above + launchRamp;
@ -87,9 +87,9 @@ abstract class RenderPriority {
static const int spaceshipRail = _above + bottomGroup; static const int spaceshipRail = _above + bottomGroup;
static const int spaceshipRailForeground = _above + spaceshipRail; static const int spaceshipRailExit = _above + ballOnSpaceshipRail;
static const int spaceshipSaucer = _above + spaceshipRail; static const int spaceshipSaucer = _above + ballOnSpaceshipRail;
static const int spaceshipSaucerWall = _above + spaceshipSaucer; static const int spaceshipSaucerWall = _above + spaceshipSaucer;

@ -2,88 +2,71 @@ import 'dart:math' as math;
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball_components/gen/assets.gen.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_components/pinball_components.dart' hide Assets;
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
/// {@template spaceship_rail} /// {@template spaceship_rail}
/// A [Blueprint] for the spaceship drop tube. /// A [Blueprint] for the rail exiting the [Spaceship].
/// {@endtemplate} /// {@endtemplate}
class SpaceshipRail extends Blueprint { class SpaceshipRail extends Blueprint {
/// {@macro spaceship_rail} /// {@macro spaceship_rail}
SpaceshipRail() SpaceshipRail()
: super( : super(
components: [ components: [
_SpaceshipRailRamp(), _SpaceshipRail(),
_SpaceshipRailExit(), _SpaceshipRailExit(),
_SpaceshipRailBase(radius: 0.55) _SpaceshipRailExitSpriteComponent()
..initialPosition = Vector2(-26.15, -18.65),
_SpaceshipRailBase(radius: 0.8)
..initialPosition = Vector2(-25.5, 12.9),
_SpaceshipRailForeground()
], ],
); );
} }
class _SpaceshipRailRamp extends BodyComponent with Layered { class _SpaceshipRail extends BodyComponent with Layered {
_SpaceshipRailRamp() _SpaceshipRail()
: super( : super(
priority: RenderPriority.spaceshipRail, priority: RenderPriority.spaceshipRail,
children: [_SpaceshipRailSpriteComponent()],
renderBody: false, renderBody: false,
children: [_SpaceshipRailRampSpriteComponent()],
) { ) {
layer = Layer.spaceshipExitRail; layer = Layer.spaceshipExitRail;
} }
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDefs = <FixtureDef>[];
final topArcShape = ArcShape( final topArcShape = ArcShape(
center: Vector2(-35.5, -30.9), center: Vector2(-35.1, -30.9),
arcRadius: 2.5, arcRadius: 2.5,
angle: math.pi, angle: math.pi,
rotation: 0.2, rotation: 0.2,
); );
final topArcFixtureDef = FixtureDef(topArcShape);
fixturesDefs.add(topArcFixtureDef);
final topLeftCurveShape = BezierCurveShape( final topLeftCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: [
Vector2(-37.9, -30.4), Vector2(-37.6, -30.4),
Vector2(-38, -23.9), Vector2(-37.8, -23.9),
Vector2(-30.93, -18.2), Vector2(-30.93, -18.2),
], ],
); );
final topLeftCurveFixtureDef = FixtureDef(topLeftCurveShape);
fixturesDefs.add(topLeftCurveFixtureDef);
final middleLeftCurveShape = BezierCurveShape( final middleLeftCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: [
topLeftCurveShape.vertices.last, topLeftCurveShape.vertices.last,
Vector2(-22.6, -10.3), Vector2(-22.6, -10.3),
Vector2(-30, -0.2), Vector2(-29.5, -0.2),
], ],
); );
final middleLeftCurveFixtureDef = FixtureDef(middleLeftCurveShape);
fixturesDefs.add(middleLeftCurveFixtureDef);
final bottomLeftCurveShape = BezierCurveShape( final bottomLeftCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: [
middleLeftCurveShape.vertices.last, middleLeftCurveShape.vertices.last,
Vector2(-36, 8.6), Vector2(-35.6, 8.6),
Vector2(-32.04, 18.3), Vector2(-31.3, 18.3),
], ],
); );
final bottomLeftCurveFixtureDef = FixtureDef(bottomLeftCurveShape);
fixturesDefs.add(bottomLeftCurveFixtureDef);
final topRightStraightShape = EdgeShape() final topRightStraightShape = EdgeShape()
..set( ..set(
Vector2(-33, -31.3),
Vector2(-27.2, -21.3), Vector2(-27.2, -21.3),
Vector2(-33, -31.3),
); );
final topRightStraightFixtureDef = FixtureDef(topRightStraightShape);
fixturesDefs.add(topRightStraightFixtureDef);
final middleRightCurveShape = BezierCurveShape( final middleRightCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: [
@ -92,8 +75,6 @@ class _SpaceshipRailRamp extends BodyComponent with Layered {
Vector2(-25.29, 1.7), Vector2(-25.29, 1.7),
], ],
); );
final middleRightCurveFixtureDef = FixtureDef(middleRightCurveShape);
fixturesDefs.add(middleRightCurveFixtureDef);
final bottomRightCurveShape = BezierCurveShape( final bottomRightCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: [
@ -102,10 +83,16 @@ class _SpaceshipRailRamp extends BodyComponent with Layered {
Vector2(-26.8, 15.7), Vector2(-26.8, 15.7),
], ],
); );
final bottomRightCurveFixtureDef = FixtureDef(bottomRightCurveShape);
fixturesDefs.add(bottomRightCurveFixtureDef);
return fixturesDefs; return [
FixtureDef(topArcShape),
FixtureDef(topLeftCurveShape),
FixtureDef(middleLeftCurveShape),
FixtureDef(bottomLeftCurveShape),
FixtureDef(topRightStraightShape),
FixtureDef(middleRightCurveShape),
FixtureDef(bottomRightCurveShape),
];
} }
@override @override
@ -116,55 +103,47 @@ class _SpaceshipRailRamp extends BodyComponent with Layered {
} }
} }
class _SpaceshipRailRampSpriteComponent extends SpriteComponent class _SpaceshipRailSpriteComponent extends SpriteComponent with HasGameRef {
with HasGameRef { _SpaceshipRailSpriteComponent()
: super(
anchor: Anchor.center,
position: Vector2(-29.4, -5.7),
);
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = Sprite(
Assets.images.spaceship.rail.main.keyName, gameRef.images.fromCache(
Assets.images.spaceship.rail.main.keyName,
),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 10;
anchor = Anchor.center;
position = Vector2(-29.4, -5.7);
} }
} }
class _SpaceshipRailForeground extends SpriteComponent with HasGameRef { class _SpaceshipRailExitSpriteComponent extends SpriteComponent
_SpaceshipRailForeground() with HasGameRef {
: super(priority: RenderPriority.spaceshipRailForeground); _SpaceshipRailExitSpriteComponent()
: super(
anchor: Anchor.center,
position: Vector2(-28, 19.4),
priority: RenderPriority.spaceshipRailExit,
);
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = Sprite(
Assets.images.spaceship.rail.foreground.keyName, gameRef.images.fromCache(
Assets.images.spaceship.rail.exit.keyName,
),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 10;
anchor = Anchor.center;
position = Vector2(-28.5, 19.7);
}
}
/// Represents the ground bases of the [_SpaceshipRailRamp].
class _SpaceshipRailBase extends BodyComponent with InitialPosition {
_SpaceshipRailBase({required this.radius}) : super(renderBody: false);
final double radius;
@override
Body createBody() {
final shape = CircleShape()..radius = radius;
final fixtureDef = FixtureDef(shape);
final bodyDef = BodyDef(
position: initialPosition,
);
return world.createBody(bodyDef)..createFixture(fixtureDef);
} }
} }

@ -12,6 +12,10 @@ class SpaceshipRailGame extends BallGame {
color: Colors.blue, color: Colors.blue,
ballPriority: RenderPriority.ballOnSpaceshipRail, ballPriority: RenderPriority.ballOnSpaceshipRail,
ballLayer: Layer.spaceshipExitRail, ballLayer: Layer.spaceshipExitRail,
imagesFileNames: [
Assets.images.spaceship.rail.main.keyName,
Assets.images.spaceship.rail.exit.keyName,
],
); );
static const description = ''' static const description = '''

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 92 KiB

@ -11,13 +11,19 @@ import '../../helpers/helpers.dart';
void main() { void main() {
group('SpaceshipRail', () { group('SpaceshipRail', () {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
Assets.images.spaceship.rail.main.keyName,
Assets.images.spaceship.rail.exit.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
flameTester.testGameWidget( flameTester.testGameWidget(
'renders correctly', 'renders correctly',
setUp: (game, tester) async { setUp: (game, tester) async {
await game.images.loadAll(assets);
await game.addFromBlueprint(SpaceshipRail()); await game.addFromBlueprint(SpaceshipRail());
await game.ready(); await game.ready();
await tester.pump();
game.camera.followVector2(Vector2.zero()); game.camera.followVector2(Vector2.zero());
game.camera.zoom = 8; game.camera.zoom = 8;

@ -21,6 +21,8 @@ void main() {
Assets.images.spaceship.ramp.arrow.active3.keyName, Assets.images.spaceship.ramp.arrow.active3.keyName,
Assets.images.spaceship.ramp.arrow.active4.keyName, Assets.images.spaceship.ramp.arrow.active4.keyName,
Assets.images.spaceship.ramp.arrow.active5.keyName, Assets.images.spaceship.ramp.arrow.active5.keyName,
Assets.images.spaceship.rail.main.keyName,
Assets.images.spaceship.rail.exit.keyName,
Assets.images.androidBumper.a.lit.keyName, Assets.images.androidBumper.a.lit.keyName,
Assets.images.androidBumper.a.dimmed.keyName, Assets.images.androidBumper.a.dimmed.keyName,
Assets.images.androidBumper.b.lit.keyName, Assets.images.androidBumper.b.lit.keyName,

@ -72,7 +72,7 @@ void main() {
Assets.images.spaceship.ramp.arrow.active4.keyName, Assets.images.spaceship.ramp.arrow.active4.keyName,
Assets.images.spaceship.ramp.arrow.active5.keyName, Assets.images.spaceship.ramp.arrow.active5.keyName,
Assets.images.spaceship.rail.main.keyName, Assets.images.spaceship.rail.main.keyName,
Assets.images.spaceship.rail.foreground.keyName, Assets.images.spaceship.rail.exit.keyName,
Assets.images.sparky.bumper.a.active.keyName, Assets.images.sparky.bumper.a.active.keyName,
Assets.images.sparky.bumper.a.inactive.keyName, Assets.images.sparky.bumper.a.inactive.keyName,
Assets.images.sparky.bumper.b.active.keyName, Assets.images.sparky.bumper.b.active.keyName,

Loading…
Cancel
Save