fix: fixed drop tube sizes

pull/79/head
RuiAlonso 4 years ago
parent 4c4972bac5
commit 08da7481dc

@ -3,17 +3,18 @@
import 'dart:math' as math; import 'dart:math' as math;
import 'dart:ui'; import 'dart:ui';
import 'package:flame/extensions.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/flame/blueprint.dart'; import 'package:pinball/flame/blueprint.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart' hide Assets;
/// A [Blueprint] for the spaceship exit rail. /// A [Blueprint] for the spaceship exit rail.
class SpaceshipExitRail extends Forge2DBlueprint { class SpaceshipExitRail extends Forge2DBlueprint {
@override @override
void build(_) { void build(_) {
final position = Vector2( final position = Vector2(
PinballGame.boardBounds.left + 17.5, PinballGame.boardBounds.left + 17,
PinballGame.boardBounds.center.dy + 26, PinballGame.boardBounds.center.dy + 26,
); );
@ -21,128 +22,125 @@ class SpaceshipExitRail extends Forge2DBlueprint {
SpaceshipExitRailEndBallContactCallback(), SpaceshipExitRailEndBallContactCallback(),
]); ]);
final spaceshipExitRailTopRamp = _SpaceshipExitRailTopRamp() final spaceshipExitRailRamp = _SpaceshipExitRailRamp()
..initialPosition = position; ..initialPosition = position;
final spaceshipExitRailBottomRamp = _SpaceshipExitRailBottomRamp()
..initialPosition = position + Vector2(2.5, -29.5);
final exitRail = SpaceshipExitRailEnd() final exitRail = SpaceshipExitRailEnd()
..initialPosition = position + Vector2(7.5, -60); ..initialPosition = position + _SpaceshipExitRailRamp.exitPoint;
addAll([ addAll([
spaceshipExitRailTopRamp, spaceshipExitRailRamp,
spaceshipExitRailBottomRamp,
exitRail, exitRail,
]); ]);
} }
} }
/// {@template jetpack_ramp} class _SpaceshipExitRailRamp extends BodyComponent
/// Represents the upper left blue ramp of the [Board].
/// {@endtemplate}
class _SpaceshipExitRailTopRamp extends BodyComponent
with InitialPosition, Layered { with InitialPosition, Layered {
_SpaceshipExitRailTopRamp() : super(priority: 2) { _SpaceshipExitRailRamp() : super(priority: 2) {
layer = Layer.spaceshipExitRail; layer = Layer.spaceshipExitRail;
// TODO(ruimiguel): remove color once asset is placed.
paint = Paint() paint = Paint()
..color = const Color.fromARGB(255, 185, 188, 189) ..color = const Color.fromARGB(255, 249, 65, 3)
..style = PaintingStyle.stroke; ..style = PaintingStyle.stroke;
} }
/// Width between walls of the ramp. static const width = 5.5;
static const width = 5.0;
static final exitPoint = Vector2(9.2, -48.5);
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDef = <FixtureDef>[]; const entranceRotationAngle = 175 * math.pi / 180;
const curveRotationAngle = 275 * math.pi / 180;
const exitRotationAngle = 340 * math.pi / 180;
final leftCurveShape = BezierCurveShape( final fixturesDef = <FixtureDef>[];
controlPoints: [
Vector2(0, 0),
Vector2(15, 0),
Vector2(20, 10),
Vector2(30, 10),
],
)..rotate(275 * math.pi / 180);
final leftFixtureDef = FixtureDef(leftCurveShape);
fixturesDef.add(leftFixtureDef);
final rightCurveShape = BezierCurveShape(
controlPoints: [
Vector2(0, 0 + width),
Vector2(15, 0 + width),
Vector2(20, 10 + width),
Vector2(30, 10 + width),
],
)..rotate(275 * math.pi / 180);
final rightFixtureDef = FixtureDef(rightCurveShape);
fixturesDef.add(rightFixtureDef);
final entranceWall = ArcShape( final entranceWall = ArcShape(
center: initialPosition + Vector2(35.7, -25.5), center: Vector2(width / 2, 0),
arcRadius: width / 2, arcRadius: width / 2,
angle: math.pi, angle: math.pi,
rotation: 170 * math.pi / 180, rotation: entranceRotationAngle,
); );
final entranceFixtureDef = FixtureDef(entranceWall); final entranceFixtureDef = FixtureDef(entranceWall);
fixturesDef.add(entranceFixtureDef); fixturesDef.add(entranceFixtureDef);
return fixturesDef; final topLeftControlPoints = [
} Vector2(0, 0),
Vector2(10, .5),
@override Vector2(7, 4),
Body createBody() { Vector2(15.5, 8.3),
final bodyDef = BodyDef() ];
..userData = this final topLeftCurveShape = BezierCurveShape(
..position = initialPosition; controlPoints: topLeftControlPoints,
)..rotate(curveRotationAngle);
final body = world.createBody(bodyDef); final topLeftFixtureDef = FixtureDef(topLeftCurveShape);
_createFixtureDefs().forEach(body.createFixture); fixturesDef.add(topLeftFixtureDef);
return body; final topRightControlPoints = [
} Vector2(0, width),
} Vector2(10, 6.5),
Vector2(7, 10),
class _SpaceshipExitRailBottomRamp extends BodyComponent Vector2(15.5, 13.2),
with InitialPosition, Layered { ];
_SpaceshipExitRailBottomRamp() : super(priority: 2) { final topRightCurveShape = BezierCurveShape(
layer = Layer.spaceshipExitRail; controlPoints: topRightControlPoints,
paint = Paint() )..rotate(curveRotationAngle);
..color = const Color.fromARGB(255, 185, 188, 189) final topRightFixtureDef = FixtureDef(topRightCurveShape);
..style = PaintingStyle.stroke; fixturesDef.add(topRightFixtureDef);
}
final mediumLeftControlPoints = [
/// Width between walls of the ramp. topLeftControlPoints.last,
static const width = 5.0; Vector2(21, 12.9),
Vector2(30, 7.1),
List<FixtureDef> _createFixtureDefs() { Vector2(32, 4.8),
final fixturesDef = <FixtureDef>[]; ];
final mediumLeftCurveShape = BezierCurveShape(
final leftCurveShape = BezierCurveShape( controlPoints: mediumLeftControlPoints,
controlPoints: [ )..rotate(curveRotationAngle);
Vector2(0, 10), final mediumLeftFixtureDef = FixtureDef(mediumLeftCurveShape);
Vector2(15, 10), fixturesDef.add(mediumLeftFixtureDef);
Vector2(20, 0),
Vector2(30, 0), final mediumRightControlPoints = [
], topRightControlPoints.last,
)..rotate(275 * math.pi / 180); Vector2(21, 17.2),
final leftFixtureDef = FixtureDef(leftCurveShape); Vector2(30, 12.1),
fixturesDef.add(leftFixtureDef); Vector2(32, 10.2),
];
final rightCurveShape = BezierCurveShape( final mediumRightCurveShape = BezierCurveShape(
controlPoints: [ controlPoints: mediumRightControlPoints,
Vector2(0, 10 + width), )..rotate(curveRotationAngle);
Vector2(15, 10 + width), final mediumRightFixtureDef = FixtureDef(mediumRightCurveShape);
Vector2(20, 0 + width), fixturesDef.add(mediumRightFixtureDef);
Vector2(30, 0 + width),
], final bottomLeftControlPoints = [
)..rotate(275 * math.pi / 180); mediumLeftControlPoints.last,
final rightFixtureDef = FixtureDef(rightCurveShape); Vector2(40, -1),
fixturesDef.add(rightFixtureDef); Vector2(48, 1.9),
Vector2(50.5, 2.5),
];
final bottomLeftCurveShape = BezierCurveShape(
controlPoints: bottomLeftControlPoints,
)..rotate(curveRotationAngle);
final bottomLeftFixtureDef = FixtureDef(bottomLeftCurveShape);
fixturesDef.add(bottomLeftFixtureDef);
final bottomRightControlPoints = [
mediumRightControlPoints.last,
Vector2(40, 4),
Vector2(46, 6.5),
Vector2(48.8, 7.6),
];
final bottomRightCurveShape = BezierCurveShape(
controlPoints: bottomRightControlPoints,
)..rotate(curveRotationAngle);
final bottomRightFixtureDef = FixtureDef(bottomRightCurveShape);
fixturesDef.add(bottomRightFixtureDef);
final exitWall = ArcShape( final exitWall = ArcShape(
center: initialPosition + Vector2(36, -26), center: exitPoint,
arcRadius: width / 2, arcRadius: width / 2,
angle: math.pi, angle: math.pi,
rotation: 350 * math.pi / 180, rotation: exitRotationAngle,
); );
final exitFixtureDef = FixtureDef(exitWall); final exitFixtureDef = FixtureDef(exitWall);
fixturesDef.add(exitFixtureDef); fixturesDef.add(exitFixtureDef);

Loading…
Cancel
Save