feat: prevent going back into launch ramp

pull/174/head
Allison Ryan 4 years ago
parent 74f82d3372
commit 556e6502f1

@ -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 = LaunchRamp.ballPriorityInsideRamp; priority = LaunchRamp.ballPriorityInsideRamp;
layer = Layer.launcher;
} }
/// {@template bonus_ball} /// {@template bonus_ball}

@ -10,13 +10,16 @@ import 'package:pinball_components/pinball_components.dart' hide Assets;
/// ///
/// [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 KeyboardHandler, InitialPosition { class Plunger extends BodyComponent
with KeyboardHandler, 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;

@ -20,20 +20,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,
]); ]);
} }
} }
@ -143,13 +144,10 @@ 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: LaunchRamp.ballPriorityInsideRamp + 1) { : super(priority: LaunchRamp.ballPriorityInsideRamp + 1);
layer = Layer.launcher;
}
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDef = <FixtureDef>[]; final fixturesDef = <FixtureDef>[];
@ -219,6 +217,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].
@ -230,10 +248,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: LaunchRamp.ballPriorityInsideRamp, insidePriority: LaunchRamp.ballPriorityInsideRamp,
outsidePriority: 0, outsidePriority: 0,
); ) {
layer = Layer.launcher;
renderBody = false;
}
final double _rotation; final double _rotation;

@ -89,7 +89,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:

Loading…
Cancel
Save