diff --git a/lib/game/components/launcher_ramp.dart b/lib/game/components/launcher_ramp.dart index d72a4155..99fc4114 100644 --- a/lib/game/components/launcher_ramp.dart +++ b/lib/game/components/launcher_ramp.dart @@ -20,8 +20,8 @@ class Launcher extends Forge2DBlueprint { @override void build(_) { final position = Vector2( - PinballGame.boardBounds.right - 30, - PinballGame.boardBounds.bottom + 40, + PinballGame.boardBounds.right - 31.3, + PinballGame.boardBounds.bottom + 33, ); addAllContactCallback([ @@ -29,10 +29,10 @@ class Launcher extends Forge2DBlueprint { ]); final leftOpening = _LauncherRampOpening(rotation: math.pi / 2) - ..initialPosition = position + Vector2(-11.6, 66.3) + ..initialPosition = position + Vector2(-11.8, 72.7) ..layer = Layer.opening; final rightOpening = _LauncherRampOpening(rotation: 0) - ..initialPosition = position + Vector2(-4.9, 59.4) + ..initialPosition = position + Vector2(-5.4, 65.4) ..layer = Layer.opening; final launcherRamp = LauncherRamp() @@ -63,16 +63,13 @@ class LauncherRamp extends BodyComponent with InitialPosition, Layered { List _createFixtureDefs() { final fixturesDef = []; - final launcherRampRotation = - -math.atan(18.6 / PinballGame.boardBounds.height); - final startPosition = initialPosition + Vector2(0, 3); - final endPosition = initialPosition + Vector2(0, 117); + final endPosition = initialPosition + Vector2(0, 130); final externalStraightShape = EdgeShape() ..set( - startPosition..rotate(launcherRampRotation), - endPosition..rotate(launcherRampRotation), + startPosition..rotate(PinballGame.boardPerspectiveAngle), + endPosition..rotate(PinballGame.boardPerspectiveAngle), ); final externalStraightFixtureDef = FixtureDef(externalStraightShape); fixturesDef.add(externalStraightFixtureDef); @@ -86,7 +83,7 @@ class LauncherRamp extends BodyComponent with InitialPosition, Layered { fixturesDef.add(internalStraightFixtureDef); final externalCurveShape = ArcShape( - center: initialPosition + Vector2(-27.5, 119), + center: initialPosition + Vector2(-28.2, 132), arcRadius: Launcher.externalRadius, angle: math.pi / 2, rotation: 3 * math.pi / 2, diff --git a/lib/game/components/plunger.dart b/lib/game/components/plunger.dart index 9791ec66..d9137457 100644 --- a/lib/game/components/plunger.dart +++ b/lib/game/components/plunger.dart @@ -21,9 +21,15 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { @override Body createBody() { - final shape = PolygonShape()..setAsBoxXY(2, 0.75); + final shape = PolygonShape() + ..setAsBox( + 1.35, + 0.5, + Vector2.zero(), + PinballGame.boardPerspectiveAngle, + ); - final fixtureDef = FixtureDef(shape)..density = 5; + final fixtureDef = FixtureDef(shape)..density = 20; final bodyDef = BodyDef() ..position = initialPosition @@ -36,7 +42,7 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { /// Set a constant downward velocity on the [Plunger]. void _pull() { - body.linearVelocity = Vector2(0, -3); + body.linearVelocity = Vector2(0, -7); } /// Set an upward velocity on the [Plunger]. @@ -44,7 +50,7 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { /// The velocity's magnitude depends on how far the [Plunger] has been pulled /// from its original [initialPosition]. void _release() { - final velocity = (initialPosition.y - body.position.y) * 9; + final velocity = (initialPosition.y - body.position.y) * 4; body.linearVelocity = Vector2(0, velocity); } @@ -121,12 +127,12 @@ class PlungerAnchorPrismaticJointDef extends PrismaticJointDef { plunger.body, anchor.body, anchor.body.position, - Vector2(0, -1), + Vector2(18.6, PinballGame.boardBounds.height), ); enableLimit = true; lowerTranslation = double.negativeInfinity; enableMotor = true; - motorSpeed = 50; + motorSpeed = 80; maxMotorForce = motorSpeed; collideConnected = true; } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index cc325532..2a8ddd42 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -1,5 +1,7 @@ // ignore_for_file: public_member_api_docs import 'dart:async'; +import 'dart:math' as math; + import 'package:flame/extensions.dart'; import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; @@ -24,6 +26,8 @@ class PinballGame extends Forge2DGame width: boardSize.x, height: -boardSize.y, ); + static final boardPerspectiveAngle = + -math.atan(18.6 / PinballGame.boardBounds.height); @override void onAttach() { @@ -60,13 +64,8 @@ class PinballGame extends Forge2DGame } Future _addPlunger() async { - plunger = Plunger(compressionDistance: 2); - - plunger.initialPosition = boardBounds.bottomRight.toVector2() + - Vector2( - -5, - 10, - ); + plunger = Plunger(compressionDistance: 29) + ..initialPosition = boardBounds.center.toVector2() + Vector2(41.5, -49); await add(plunger); } diff --git a/packages/pinball_components/lib/src/components/ball.dart b/packages/pinball_components/lib/src/components/ball.dart index ec51cb47..674cdbf3 100644 --- a/packages/pinball_components/lib/src/components/ball.dart +++ b/packages/pinball_components/lib/src/components/ball.dart @@ -22,7 +22,7 @@ class Ball extends BodyComponent } /// The size of the [Ball] - final Vector2 size = Vector2.all(2); + final Vector2 size = Vector2.all(3); /// The base [Color] used to tint this [Ball] final Color baseColor; diff --git a/packages/pinball_components/test/src/components/ball_test.dart b/packages/pinball_components/test/src/components/ball_test.dart index 682f1f73..14a3de35 100644 --- a/packages/pinball_components/test/src/components/ball_test.dart +++ b/packages/pinball_components/test/src/components/ball_test.dart @@ -86,7 +86,7 @@ void main() { final fixture = ball.body.fixtures[0]; expect(fixture.shape.shapeType, equals(ShapeType.circle)); - expect(fixture.shape.radius, equals(1)); + expect(fixture.shape.radius, equals(1.5)); }, );