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) {
controller = BallController(this);
priority = LaunchRamp.ballPriorityInsideRamp;
layer = Layer.launcher;
}
/// {@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].
/// {@endtemplate}
class Plunger extends BodyComponent with KeyboardHandler, InitialPosition {
class Plunger extends BodyComponent
with KeyboardHandler, InitialPosition, Layered {
/// {@macro plunger}
Plunger({
required this.compressionDistance,
// TODO(ruimiguel): set to priority +1 over LaunchRamp once all priorities
// are fixed.
}) : super(priority: 0);
}) : super(priority: 0) {
layer = Layer.launcher;
}
/// Distance the plunger can lower.
final double compressionDistance;

@ -20,20 +20,21 @@ class LaunchRamp extends Forge2DBlueprint {
RampOpeningBallContactCallback<_LaunchRampExit>(),
]);
final launchRampBase = _LaunchRampBase()..layer = Layer.launcher;
final launchRampBase = _LaunchRampBase();
final launchRampForegroundRailing = _LaunchRampForegroundRailing()
..layer = Layer.launcher;
final launchRampForegroundRailing = _LaunchRampForegroundRailing();
final launchRampExit = _LaunchRampExit(rotation: math.pi / 2)
..initialPosition = Vector2(1.8, 34.2)
..layer = Layer.opening
..renderBody = false;
..initialPosition = Vector2(0.6, 34);
final launchRampCloseWall = _LaunchRampCloseWall()
..initialPosition = Vector2(4, 66.5);
addAll([
launchRampBase,
launchRampForegroundRailing,
launchRampExit,
launchRampCloseWall,
]);
}
}
@ -143,13 +144,10 @@ class _LaunchRampBaseSpriteComponent extends SpriteComponent with HasGameRef {
/// Foreground railing for the [_LaunchRampBase] to render in front of the
/// [Ball].
/// {@endtemplate}
class _LaunchRampForegroundRailing extends BodyComponent
with InitialPosition, Layered {
class _LaunchRampForegroundRailing extends BodyComponent with InitialPosition {
/// {@macro launch_ramp_foreground_railing}
_LaunchRampForegroundRailing()
: super(priority: LaunchRamp.ballPriorityInsideRamp + 1) {
layer = Layer.launcher;
}
: super(priority: LaunchRamp.ballPriorityInsideRamp + 1);
List<FixtureDef> _createFixtureDefs() {
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}
/// [RampOpening] with [Layer.launcher] to filter [Ball]s exiting the
/// [LaunchRamp].
@ -230,10 +248,14 @@ class _LaunchRampExit extends RampOpening {
}) : _rotation = rotation,
super(
insideLayer: Layer.launcher,
outsideLayer: Layer.board,
orientation: RampOrientation.down,
insidePriority: LaunchRamp.ballPriorityInsideRamp,
outsidePriority: 0,
);
) {
layer = Layer.launcher;
renderBody = false;
}
final double _rotation;

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

Loading…
Cancel
Save