feat: prevent re-entering launch ramp (#174)

* fix: launch ramp render issue

* feat: prevent going back into launch ramp

* fix: changes from merge
pull/186/head
Allison Ryan 3 years ago committed by GitHub
parent bc53fb64d9
commit e1bdb0e14b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -19,6 +19,7 @@ class ControlledBall extends Ball with Controls<BallController> {
}) : super(baseColor: theme.characterTheme.ballColor) { }) : super(baseColor: theme.characterTheme.ballColor) {
controller = BallController(this); controller = BallController(this);
priority = Ball.launchRampPriority; priority = Ball.launchRampPriority;
layer = Layer.launcher;
} }
/// {@template bonus_ball} /// {@template bonus_ball}

@ -172,7 +172,7 @@ class DebugPinballGame extends PinballGame with TapDetector {
anchor: Anchor.center, anchor: Anchor.center,
) )
..position = Vector2(0, -7.8) ..position = Vector2(0, -7.8)
..priority = -2; ..priority = -4;
await add(spriteComponent); await add(spriteComponent);
} }

@ -35,7 +35,7 @@ class Ball<T extends Forge2DGame> extends BodyComponent<T>
static const int spaceshipRailPriority = 2; static const int spaceshipRailPriority = 2;
/// 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 launchRampPriority = 0; static const int launchRampPriority = -2;
/// The size of the [Ball]. /// The size of the [Ball].
static final Vector2 size = Vector2.all(4.13); static final Vector2 size = Vector2.all(4.13);

@ -13,7 +13,7 @@ class Boundaries extends Forge2DBlueprint {
final bottomBoundary = _BottomBoundary(); final bottomBoundary = _BottomBoundary();
final outerBoundary = _OuterBoundary(); final outerBoundary = _OuterBoundary();
addAll([bottomBoundary, outerBoundary]); addAll([outerBoundary, bottomBoundary]);
} }
} }
@ -23,7 +23,7 @@ class Boundaries extends Forge2DBlueprint {
/// {@endtemplate bottom_boundary} /// {@endtemplate bottom_boundary}
class _BottomBoundary extends BodyComponent with InitialPosition { class _BottomBoundary extends BodyComponent with InitialPosition {
/// {@macro bottom_boundary} /// {@macro bottom_boundary}
_BottomBoundary() : super(priority: 2); _BottomBoundary() : super(priority: 1);
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDefs = <FixtureDef>[]; final fixturesDefs = <FixtureDef>[];
@ -88,7 +88,7 @@ class _BottomBoundarySpriteComponent extends SpriteComponent with HasGameRef {
/// {@endtemplate outer_boundary} /// {@endtemplate outer_boundary}
class _OuterBoundary extends BodyComponent with InitialPosition { class _OuterBoundary extends BodyComponent with InitialPosition {
/// {@macro outer_boundary} /// {@macro outer_boundary}
_OuterBoundary() : super(priority: -1); _OuterBoundary() : super(priority: Ball.launchRampPriority - 1);
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDefs = <FixtureDef>[]; final fixturesDefs = <FixtureDef>[];

@ -124,7 +124,7 @@ class _DinoTopWallSpriteComponent extends SpriteComponent with HasGameRef {
/// {@endtemplate} /// {@endtemplate}
class _DinoBottomWall extends BodyComponent with InitialPosition { class _DinoBottomWall extends BodyComponent with InitialPosition {
///{@macro dino_top_wall} ///{@macro dino_top_wall}
_DinoBottomWall() : super(priority: 1); _DinoBottomWall();
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDef = <FixtureDef>[]; final fixturesDef = <FixtureDef>[];

@ -17,20 +17,21 @@ class LaunchRamp extends Forge2DBlueprint {
RampOpeningBallContactCallback<_LaunchRampExit>(), RampOpeningBallContactCallback<_LaunchRampExit>(),
]); ]);
final launchRampBase = _LaunchRampBase()..layer = Layer.launcher; final launchRampBase = _LaunchRampBase();
final launchRampForegroundRailing = _LaunchRampForegroundRailing() final launchRampForegroundRailing = _LaunchRampForegroundRailing();
..layer = Layer.launcher;
final launchRampExit = _LaunchRampExit(rotation: math.pi / 2) final launchRampExit = _LaunchRampExit(rotation: math.pi / 2)
..initialPosition = Vector2(1.8, 34.2) ..initialPosition = Vector2(0.6, 34);
..layer = Layer.opening
..renderBody = false; final launchRampCloseWall = _LaunchRampCloseWall()
..initialPosition = Vector2(4, 66.5);
addAll([ addAll([
launchRampBase, launchRampBase,
launchRampForegroundRailing, launchRampForegroundRailing,
launchRampExit, launchRampExit,
launchRampCloseWall,
]); ]);
} }
} }
@ -40,10 +41,7 @@ class LaunchRamp extends Forge2DBlueprint {
/// {@endtemplate} /// {@endtemplate}
class _LaunchRampBase extends BodyComponent with InitialPosition, Layered { class _LaunchRampBase extends BodyComponent with InitialPosition, Layered {
/// {@macro launch_ramp_base} /// {@macro launch_ramp_base}
_LaunchRampBase() _LaunchRampBase() : super(priority: Ball.launchRampPriority - 1) {
: super(
priority: Ball.launchRampPriority - 1,
) {
layer = Layer.launcher; layer = Layer.launcher;
} }
@ -143,15 +141,9 @@ class _LaunchRampBaseSpriteComponent extends SpriteComponent with HasGameRef {
/// Foreground railing for the [_LaunchRampBase] to render in front of the /// Foreground railing for the [_LaunchRampBase] to render in front of the
/// [Ball]. /// [Ball].
/// {@endtemplate} /// {@endtemplate}
class _LaunchRampForegroundRailing extends BodyComponent class _LaunchRampForegroundRailing extends BodyComponent with InitialPosition {
with InitialPosition, Layered {
/// {@macro launch_ramp_foreground_railing} /// {@macro launch_ramp_foreground_railing}
_LaunchRampForegroundRailing() _LaunchRampForegroundRailing() : super(priority: Ball.launchRampPriority + 1);
: super(
priority: Ball.launchRampPriority + 1,
) {
layer = Layer.launcher;
}
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDef = <FixtureDef>[]; final fixturesDef = <FixtureDef>[];
@ -221,6 +213,26 @@ class _LaunchRampForegroundRailingSpriteComponent extends SpriteComponent
} }
} }
class _LaunchRampCloseWall extends BodyComponent with InitialPosition, Layered {
_LaunchRampCloseWall() {
layer = Layer.board;
renderBody = false;
}
@override
Body createBody() {
final shape = EdgeShape()..set(Vector2.zero(), Vector2(0, 4));
final fixtureDef = FixtureDef(shape);
final bodyDef = BodyDef()
..userData = this
..position = initialPosition;
return world.createBody(bodyDef)..createFixture(fixtureDef);
}
}
/// {@template launch_ramp_exit} /// {@template launch_ramp_exit}
/// [RampOpening] with [Layer.launcher] to filter [Ball]s exiting the /// [RampOpening] with [Layer.launcher] to filter [Ball]s exiting the
/// [LaunchRamp]. /// [LaunchRamp].
@ -232,9 +244,14 @@ class _LaunchRampExit extends RampOpening {
}) : _rotation = rotation, }) : _rotation = rotation,
super( super(
insideLayer: Layer.launcher, insideLayer: Layer.launcher,
outsideLayer: Layer.board,
orientation: RampOrientation.down, orientation: RampOrientation.down,
insidePriority: Ball.launchRampPriority, insidePriority: Ball.launchRampPriority,
); outsidePriority: 0,
) {
layer = Layer.launcher;
renderBody = false;
}
final double _rotation; final double _rotation;

@ -88,7 +88,7 @@ extension LayerMaskBits on Layer {
case Layer.spaceshipEntranceRamp: case Layer.spaceshipEntranceRamp:
return 0x0002; return 0x0002;
case Layer.launcher: case Layer.launcher:
return 0x0005; return 0x0008;
case Layer.spaceship: case Layer.spaceship:
return 0x000A; return 0x000A;
case Layer.spaceshipExitRail: case Layer.spaceshipExitRail:

@ -8,13 +8,15 @@ import 'package:pinball_components/pinball_components.dart';
/// ///
/// [Plunger] ignores gravity so the player controls its downward [pull]. /// [Plunger] ignores gravity so the player controls its downward [pull].
/// {@endtemplate} /// {@endtemplate}
class Plunger extends BodyComponent with InitialPosition { class Plunger extends BodyComponent with InitialPosition, Layered {
/// {@macro plunger} /// {@macro plunger}
Plunger({ Plunger({
required this.compressionDistance, required this.compressionDistance,
// TODO(ruimiguel): set to priority +1 over LaunchRamp once all priorities // TODO(ruimiguel): set to priority +1 over LaunchRamp once all priorities
// are fixed. // are fixed.
}) : super(priority: 0); }) : super(priority: 0) {
layer = Layer.launcher;
}
/// Distance the plunger can lower. /// Distance the plunger can lower.
final double compressionDistance; final double compressionDistance;

Loading…
Cancel
Save