feat: added spaceship drop ramp to board

pull/79/head
RuiAlonso 4 years ago
parent d5f41277c8
commit 87ccdf9aed

@ -16,4 +16,5 @@ export 'ramp_opening.dart';
export 'round_bumper.dart'; export 'round_bumper.dart';
export 'score_points.dart'; export 'score_points.dart';
export 'spaceship.dart'; export 'spaceship.dart';
export 'spaceship_drop_ramp.dart';
export 'wall.dart'; export 'wall.dart';

@ -58,6 +58,9 @@ enum Layer {
/// Collide only with Spaceship group elements. /// Collide only with Spaceship group elements.
spaceship, spaceship,
/// Collide only with Spaceship drop group elements.
spaceship_drop,
} }
/// {@template layer_mask_bits} /// {@template layer_mask_bits}
@ -86,6 +89,8 @@ extension LayerMaskBits on Layer {
return 0x0005; return 0x0005;
case Layer.spaceship: case Layer.spaceship:
return 0x000A; return 0x000A;
case Layer.spaceship_drop:
return 0x0004;
} }
} }
} }

@ -0,0 +1,72 @@
import 'dart:math' as math;
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/flame/blueprint.dart';
import 'package:pinball/game/game.dart';
class SpaceshipDropRamp extends Forge2DBlueprint {
@override
void build() {
final position = Vector2(
PinballGame.boardBounds.left + 23,
PinballGame.boardBounds.center.dy + 25,
);
addAllContactCallback([
SpaceshipHoleBallContactCallback(),
SpaceshipEntranceBallContactCallback(),
]);
final curvedPath = Pathway.bezierCurve(
color: Color.fromARGB(255, 226, 226, 218),
width: 5,
rotation: 230 * math.pi / 180,
controlPoints: [
Vector2(0, 0),
Vector2(0, 30),
Vector2(30, 0),
Vector2(30, 30),
],
)..layer = Layer.spaceship_drop;
addAll([
curvedPath..initialPosition = position,
]);
}
}
class SpaceshipRampEntrance extends RampOpening {
/// {@macro spaceship_ramp_entrance}
SpaceshipRampEntrance()
: super(
pathwayLayer: Layer.spaceship_drop,
orientation: RampOrientation.up,
) {
layer = Layer.spaceship_drop;
}
@override
Shape get shape {
const radius = Spaceship.radius * 2;
return PolygonShape();
}
}
class SpaceshipRampExit extends RampOpening {
/// {@macro spaceship_ramp_entrance}
SpaceshipRampExit()
: super(
pathwayLayer: Layer.spaceship_drop,
orientation: RampOrientation.down,
) {
layer = Layer.spaceship_drop;
}
@override
Shape get shape {
const radius = Spaceship.radius * 2;
return PolygonShape();
}
}

@ -83,6 +83,8 @@ class PinballGame extends Forge2DGame
} }
Future<void> _addPaths() async { Future<void> _addPaths() async {
unawaited(addFromBlueprint(SpaceshipDropRamp()));
final jetpackRamp = JetpackRamp( final jetpackRamp = JetpackRamp(
position: Vector2( position: Vector2(
PinballGame.boardBounds.left + 40.5, PinballGame.boardBounds.left + 40.5,

Loading…
Cancel
Save