diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index f022862c..e71d5ede 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -12,22 +12,15 @@ class Board extends Component { @override Future onLoad() async { - // TODO(alestiago): adjust positioning once sprites are added. - final bottomGroup = _BottomGroup( - position: Vector2( - PinballGame.boardBounds.center.dx, - PinballGame.boardBounds.bottom + 10, - ), - spacing: 2, - ); + final bottomGroup = _BottomGroup(); final flutterForest = FlutterForest(); // TODO(alestiago): adjust positioning to real design. final dino = ChromeDino() ..initialPosition = Vector2( - PinballGame.boardBounds.center.dx + 25, - PinballGame.boardBounds.center.dy + 10, + BoardDimensions.bounds.center.dx + 25, + BoardDimensions.bounds.center.dy + 10, ); await addAll([ @@ -46,27 +39,15 @@ class Board extends Component { // TODO(alestiago): Consider renaming once entire Board is defined. class _BottomGroup extends Component { /// {@macro bottom_group} - _BottomGroup({ - required this.position, - required this.spacing, - }); - - /// The amount of space between the line of symmetry. - final double spacing; - - /// The position of this [_BottomGroup]. - final Vector2 position; + _BottomGroup(); @override Future onLoad() async { - final spacing = this.spacing + Flipper.size.x / 2; final rightSide = _BottomGroupSide( side: BoardSide.right, - position: position + Vector2(spacing, 0), ); final leftSide = _BottomGroupSide( side: BoardSide.left, - position: position + Vector2(-spacing, 0), ); await addAll([rightSide, leftSide]); @@ -82,36 +63,29 @@ class _BottomGroupSide extends Component { /// {@macro bottom_group_side} _BottomGroupSide({ required BoardSide side, - required Vector2 position, - }) : _side = side, - _position = position; + }) : _side = side; final BoardSide _side; - final Vector2 _position; - @override Future onLoad() async { final direction = _side.direction; + final centerXAdjustment = _side.isLeft ? 0 : -6.5; final flipper = ControlledFlipper( side: _side, - )..initialPosition = _position; - + )..initialPosition = Vector2((11.0 * direction) + centerXAdjustment, -42.4); final baseboard = Baseboard(side: _side) - ..initialPosition = _position + - Vector2( - (Baseboard.size.x / 1.6 * direction), - Baseboard.size.y - 2, - ); - + ..initialPosition = Vector2( + (25.58 * direction) + centerXAdjustment, + -28.69, + ); final kicker = Kicker( side: _side, - )..initialPosition = _position + - Vector2( - (Flipper.size.x) * direction, - Flipper.size.y + Kicker.size.y, - ); + )..initialPosition = Vector2( + (22.0 * direction) + centerXAdjustment, + -26, + ); await addAll([flipper, baseboard, kicker]); } diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 1f1f1ce5..e19c607c 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -1,4 +1,3 @@ -export 'baseboard.dart'; export 'board.dart'; export 'bonus_word.dart'; export 'chrome_dino.dart'; diff --git a/lib/game/components/jetpack_ramp.dart b/lib/game/components/jetpack_ramp.dart index b58ddfa6..4c4c8be9 100644 --- a/lib/game/components/jetpack_ramp.dart +++ b/lib/game/components/jetpack_ramp.dart @@ -13,8 +13,8 @@ class Jetpack extends Forge2DBlueprint { @override void build(_) { final position = Vector2( - PinballGame.boardBounds.left + 40.5, - PinballGame.boardBounds.top - 31.5, + BoardDimensions.bounds.left + 40.5, + BoardDimensions.bounds.top - 31.5, ); addAllContactCallback([ diff --git a/lib/game/components/launcher_ramp.dart b/lib/game/components/launcher_ramp.dart index b3f3cb23..79b7c831 100644 --- a/lib/game/components/launcher_ramp.dart +++ b/lib/game/components/launcher_ramp.dart @@ -13,8 +13,8 @@ class Launcher extends Forge2DBlueprint { @override void build(_) { final position = Vector2( - PinballGame.boardBounds.right - 31.3, - PinballGame.boardBounds.bottom + 33, + BoardDimensions.bounds.right - 31.3, + BoardDimensions.bounds.bottom + 33, ); addAllContactCallback([ @@ -67,8 +67,8 @@ class LauncherRamp extends BodyComponent with InitialPosition, Layered { final rightStraightShape = EdgeShape() ..set( - startPosition..rotate(PinballGame.boardPerspectiveAngle), - endPosition..rotate(PinballGame.boardPerspectiveAngle), + startPosition..rotate(BoardDimensions.perspectiveAngle), + endPosition..rotate(BoardDimensions.perspectiveAngle), ); final rightStraightFixtureDef = FixtureDef(rightStraightShape); fixturesDef.add(rightStraightFixtureDef); diff --git a/lib/game/components/plunger.dart b/lib/game/components/plunger.dart index 5703e525..60e29a4d 100644 --- a/lib/game/components/plunger.dart +++ b/lib/game/components/plunger.dart @@ -1,7 +1,6 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/services.dart'; -import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; /// {@template plunger} @@ -26,10 +25,10 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { 1.35, 0.5, Vector2.zero(), - PinballGame.boardPerspectiveAngle, + BoardDimensions.perspectiveAngle, ); - final fixtureDef = FixtureDef(shape)..density = 20; + final fixtureDef = FixtureDef(shape)..density = 80; final bodyDef = BodyDef() ..position = initialPosition @@ -50,7 +49,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) * 4; + final velocity = (initialPosition.y - body.position.y) * 5; body.linearVelocity = Vector2(0, velocity); } @@ -127,12 +126,12 @@ class PlungerAnchorPrismaticJointDef extends PrismaticJointDef { plunger.body, anchor.body, anchor.body.position, - Vector2(18.6, PinballGame.boardBounds.height), + Vector2(18.6, BoardDimensions.bounds.height), ); enableLimit = true; lowerTranslation = double.negativeInfinity; enableMotor = true; - motorSpeed = 80; + motorSpeed = 1000; maxMotorForce = motorSpeed; collideConnected = true; } diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index 96522cbd..f5d03c80 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -3,7 +3,6 @@ import 'package:flame/extensions.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball/game/components/components.dart'; -import 'package:pinball/game/pinball_game.dart'; import 'package:pinball_components/pinball_components.dart'; /// {@template wall} @@ -42,13 +41,12 @@ class Wall extends BodyComponent { /// Create top, left, and right [Wall]s for the game board. List createBoundaries(Forge2DGame game) { - final topLeft = - PinballGame.boardBounds.topLeft.toVector2() + Vector2(18.6, 0); - final bottomRight = PinballGame.boardBounds.bottomRight.toVector2(); + final topLeft = BoardDimensions.bounds.topLeft.toVector2() + Vector2(18.6, 0); + final bottomRight = BoardDimensions.bounds.bottomRight.toVector2(); final topRight = - PinballGame.boardBounds.topRight.toVector2() - Vector2(18.6, 0); - final bottomLeft = PinballGame.boardBounds.bottomLeft.toVector2(); + BoardDimensions.bounds.topRight.toVector2() - Vector2(18.6, 0); + final bottomLeft = BoardDimensions.bounds.bottomLeft.toVector2(); return [ Wall(start: topLeft, end: topRight), @@ -67,8 +65,8 @@ class BottomWall extends Wall { /// {@macro bottom_wall} BottomWall() : super( - start: PinballGame.boardBounds.bottomLeft.toVector2(), - end: PinballGame.boardBounds.bottomRight.toVector2(), + start: BoardDimensions.bounds.bottomLeft.toVector2(), + end: BoardDimensions.bounds.bottomRight.toVector2(), ); } diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index 35b09d5a..15045e91 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -11,6 +11,8 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.flutterSignPost.keyName), images.load(components.Assets.images.flipper.left.keyName), images.load(components.Assets.images.flipper.right.keyName), + images.load(components.Assets.images.baseboard.left.keyName), + images.load(components.Assets.images.baseboard.right.keyName), images.load(Assets.images.components.background.path), images.load(Assets.images.components.spaceshipDropTube.path), ]); diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index c7b42f7b..ca6fae17 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -1,6 +1,5 @@ // ignore_for_file: public_member_api_docs import 'dart:async'; -import 'dart:math' as math; import 'package:flame/components.dart'; import 'package:flame/extensions.dart'; @@ -22,15 +21,6 @@ class PinballGame extends Forge2DGame late final Plunger plunger; - static final boardSize = Vector2(101.6, 143.8); - static final boardBounds = Rect.fromCenter( - center: Offset.zero, - width: boardSize.x, - height: -boardSize.y, - ); - static final boardPerspectiveAngle = - -math.atan(18.6 / PinballGame.boardBounds.height); - @override void onAttach() { super.onAttach(); @@ -78,7 +68,8 @@ class PinballGame extends Forge2DGame Future _addPlunger() async { plunger = Plunger(compressionDistance: 29) - ..initialPosition = boardBounds.center.toVector2() + Vector2(41.5, -49); + ..initialPosition = + BoardDimensions.bounds.center.toVector2() + Vector2(41.5, -49); await add(plunger); } @@ -86,8 +77,8 @@ class PinballGame extends Forge2DGame await add( BonusWord( position: Vector2( - boardBounds.center.dx - 3.07, - boardBounds.center.dy - 2.4, + BoardDimensions.bounds.center.dx - 3.07, + BoardDimensions.bounds.center.dy - 2.4, ), ), ); diff --git a/packages/pinball_components/assets/images/ball.png b/packages/pinball_components/assets/images/ball.png index af80811b..43332c9a 100644 Binary files a/packages/pinball_components/assets/images/ball.png and b/packages/pinball_components/assets/images/ball.png differ diff --git a/packages/pinball_components/assets/images/baseboard/left.png b/packages/pinball_components/assets/images/baseboard/left.png new file mode 100644 index 00000000..17253554 Binary files /dev/null and b/packages/pinball_components/assets/images/baseboard/left.png differ diff --git a/packages/pinball_components/assets/images/baseboard/right.png b/packages/pinball_components/assets/images/baseboard/right.png new file mode 100644 index 00000000..081a1782 Binary files /dev/null and b/packages/pinball_components/assets/images/baseboard/right.png differ diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 54b0ff53..27a54591 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -13,6 +13,8 @@ class $AssetsImagesGen { /// File path: assets/images/ball.png AssetGenImage get ball => const AssetGenImage('assets/images/ball.png'); + $AssetsImagesBaseboardGen get baseboard => const $AssetsImagesBaseboardGen(); + $AssetsImagesFlipperGen get flipper => const $AssetsImagesFlipperGen(); /// File path: assets/images/flutter_sign_post.png @@ -28,6 +30,18 @@ class $AssetsImagesGen { const AssetGenImage('assets/images/spaceship_saucer.png'); } +class $AssetsImagesBaseboardGen { + const $AssetsImagesBaseboardGen(); + + /// File path: assets/images/baseboard/left.png + AssetGenImage get left => + const AssetGenImage('assets/images/baseboard/left.png'); + + /// File path: assets/images/baseboard/right.png + AssetGenImage get right => + const AssetGenImage('assets/images/baseboard/right.png'); +} + class $AssetsImagesFlipperGen { const $AssetsImagesFlipperGen(); diff --git a/packages/pinball_components/lib/src/components/ball.dart b/packages/pinball_components/lib/src/components/ball.dart index 96e0bf9d..b62ceeba 100644 --- a/packages/pinball_components/lib/src/components/ball.dart +++ b/packages/pinball_components/lib/src/components/ball.dart @@ -23,13 +23,14 @@ class Ball extends BodyComponent } /// The size of the [Ball] - static final Vector2 size = Vector2.all(3); + static final Vector2 size = Vector2.all(4.5); /// The base [Color] used to tint this [Ball] final Color baseColor; double _boostTimer = 0; static const _boostDuration = 2.0; + late SpriteComponent _spriteComponent; @override Future onLoad() async { @@ -37,9 +38,9 @@ class Ball extends BodyComponent final sprite = await gameRef.loadSprite(Assets.images.ball.keyName); final tint = baseColor.withOpacity(0.5); await add( - SpriteComponent( + _spriteComponent = SpriteComponent( sprite: sprite, - size: size, + size: size * 1.15, anchor: Anchor.center, )..tint(tint), ); @@ -88,6 +89,8 @@ class Ball extends BodyComponent unawaited(gameRef.add(effect)); } + + _rescale(); } /// Applies a boost on this [Ball]. @@ -95,4 +98,18 @@ class Ball extends BodyComponent body.applyLinearImpulse(impulse); _boostTimer = _boostDuration; } + + void _rescale() { + final boardHeight = BoardDimensions.size.y; + const maxShrinkAmount = BoardDimensions.perspectiveShrinkFactor; + + final adjustedYPosition = body.position.y + (boardHeight / 2); + + final scaleFactor = ((boardHeight - adjustedYPosition) / + BoardDimensions.shrinkAdjustedHeight) + + maxShrinkAmount; + + body.fixtures.first.shape.radius = (size.x / 2) * scaleFactor; + _spriteComponent.scale = Vector2.all(scaleFactor); + } } diff --git a/lib/game/components/baseboard.dart b/packages/pinball_components/lib/src/components/baseboard.dart similarity index 59% rename from lib/game/components/baseboard.dart rename to packages/pinball_components/lib/src/components/baseboard.dart index cdad23fc..0a6bcc91 100644 --- a/lib/game/components/baseboard.dart +++ b/packages/pinball_components/lib/src/components/baseboard.dart @@ -1,5 +1,6 @@ import 'dart:math' as math; +import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -12,9 +13,6 @@ class Baseboard extends BodyComponent with InitialPosition { required BoardSide side, }) : _side = side; - /// The size of the [Baseboard]. - static final size = Vector2(24.2, 13.5); - /// Whether the [Baseboard] is on the left or right side of the board. final BoardSide _side; @@ -24,50 +22,55 @@ class Baseboard extends BodyComponent with InitialPosition { final arcsAngle = -1.11 * direction; const arcsRotation = math.pi / 2.08; + final pegBumperShape = CircleShape()..radius = 0.7; + pegBumperShape.position.setValues(11.11 * direction, 7.15); + final pegBumperFixtureDef = FixtureDef(pegBumperShape); + fixturesDef.add(pegBumperFixtureDef); + final topCircleShape = CircleShape()..radius = 0.7; - topCircleShape.position.setValues(11.39 * direction, 6.05); + topCircleShape.position.setValues(9.71 * direction, 4.95); final topCircleFixtureDef = FixtureDef(topCircleShape); fixturesDef.add(topCircleFixtureDef); final innerEdgeShape = EdgeShape() ..set( - Vector2(10.86 * direction, 6.45), - Vector2(6.96 * direction, 0.25), + Vector2(9.01 * direction, 5.35), + Vector2(5.29 * direction, -0.95), ); final innerEdgeShapeFixtureDef = FixtureDef(innerEdgeShape); fixturesDef.add(innerEdgeShapeFixtureDef); final outerEdgeShape = EdgeShape() ..set( - Vector2(11.96 * direction, 5.85), - Vector2(5.48 * direction, -4.85), + Vector2(10.41 * direction, 4.75), + Vector2(3.79 * direction, -5.95), ); final outerEdgeShapeFixtureDef = FixtureDef(outerEdgeShape); fixturesDef.add(outerEdgeShapeFixtureDef); final upperArcShape = ArcShape( - center: Vector2(1.76 * direction, 3.25), + center: Vector2(0.09 * direction, 2.15), arcRadius: 6.1, angle: arcsAngle, rotation: arcsRotation, ); - final upperArcFixtureDefs = FixtureDef(upperArcShape); - fixturesDef.add(upperArcFixtureDefs); + final upperArcFixtureDef = FixtureDef(upperArcShape); + fixturesDef.add(upperArcFixtureDef); final lowerArcShape = ArcShape( - center: Vector2(1.85 * direction, -2.15), + center: Vector2(0.09 * direction, -3.35), arcRadius: 4.5, angle: arcsAngle, rotation: arcsRotation, ); - final lowerArcFixtureDefs = FixtureDef(lowerArcShape); - fixturesDef.add(lowerArcFixtureDefs); + final lowerArcFixtureDef = FixtureDef(lowerArcShape); + fixturesDef.add(lowerArcFixtureDef); final bottomRectangle = PolygonShape() ..setAsBox( - 7, + 6.8, 2, - Vector2(-5.14 * direction, -4.75), + Vector2(-6.3 * direction, -5.85), 0, ); final bottomRectangleFixtureDef = FixtureDef(bottomRectangle); @@ -76,11 +79,31 @@ class Baseboard extends BodyComponent with InitialPosition { return fixturesDef; } + @override + Future onLoad() async { + await super.onLoad(); + + final sprite = await gameRef.loadSprite( + (_side.isLeft) + ? Assets.images.baseboard.left.keyName + : Assets.images.baseboard.right.keyName, + ); + + await add( + SpriteComponent( + sprite: sprite, + size: Vector2(27.5, 17.9), + anchor: Anchor.center, + position: Vector2(_side.isLeft ? 0.4 : -0.4, 0), + ), + ); + + renderBody = false; + } + @override Body createBody() { - // TODO(allisonryan0002): share sweeping angle with flipper when components - // are grouped. - const angle = math.pi / 5; + const angle = 37.1 * (math.pi / 180); final bodyDef = BodyDef() ..position = initialPosition diff --git a/packages/pinball_components/lib/src/components/board_dimensions.dart b/packages/pinball_components/lib/src/components/board_dimensions.dart new file mode 100644 index 00000000..b4db8c3c --- /dev/null +++ b/packages/pinball_components/lib/src/components/board_dimensions.dart @@ -0,0 +1,29 @@ +import 'dart:math' as math; + +import 'package:flame/extensions.dart'; + +/// {@template board_dimensions} +/// Contains various board properties and dimensions for global use. +/// {@endtemplate} +// TODO(allisonryan0002): consider alternatives for global dimensions. +class BoardDimensions { + /// Width and height of the board. + static final size = Vector2(101.6, 143.8); + + /// [Rect] for easier access to board boundaries. + static final bounds = Rect.fromCenter( + center: Offset.zero, + width: size.x, + height: -size.y, + ); + + /// 3D perspective angle of the board in radians. + static final perspectiveAngle = -math.atan(18.6 / bounds.height); + + /// Factor the board shrinks by from the closest point to the farthest. + static const perspectiveShrinkFactor = 0.63; + + /// Board height based on the [perspectiveShrinkFactor]. + static final shrinkAdjustedHeight = + (1 / (1 - perspectiveShrinkFactor)) * size.y; +} diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index c29f91a3..a475f91e 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -1,4 +1,6 @@ export 'ball.dart'; +export 'baseboard.dart'; +export 'board_dimensions.dart'; export 'board_side.dart'; export 'fire_effect.dart'; export 'flipper.dart'; diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index aa1eb224..c0eab284 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -26,6 +26,7 @@ flutter: generate: true assets: - assets/images/ + - assets/images/baseboard/ - assets/images/flipper/ flutter_gen: diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 2df3c16c..62ff7022 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -6,7 +6,6 @@ // https://opensource.org/licenses/MIT. import 'package:dashbook/dashbook.dart'; import 'package:flutter/material.dart'; -import 'package:sandbox/stories/effects/effects.dart'; import 'package:sandbox/stories/spaceship/spaceship.dart'; import 'package:sandbox/stories/stories.dart'; @@ -18,5 +17,6 @@ void main() { addEffectsStories(dashbook); addFlipperStories(dashbook); addSpaceshipStories(dashbook); + addBaseboardStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart new file mode 100644 index 00000000..96d89928 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart @@ -0,0 +1,15 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/baseboard/basic.dart'; + +void addBaseboardStories(Dashbook dashbook) { + dashbook.storiesOf('Baseboard').add( + 'Basic', + (context) => GameWidget( + game: BasicBaseboardGame(), + ), + codeLink: buildSourceLink('baseboard/basic.dart'), + info: BasicBaseboardGame.info, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart b/packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart new file mode 100644 index 00000000..127c1dec --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart @@ -0,0 +1,26 @@ +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:sandbox/common/common.dart'; + +class BasicBaseboardGame extends BasicGame { + static const info = ''' + Basic example of how a Baseboard works. +'''; + + @override + Future onLoad() async { + await super.onLoad(); + + final center = screenToWorld(camera.viewport.canvasSize! / 2); + + final leftBaseboard = Baseboard(side: BoardSide.left) + ..initialPosition = center - Vector2(25, 0); + final rightBaseboard = Baseboard(side: BoardSide.right) + ..initialPosition = center + Vector2(25, 0); + + await addAll([ + leftBaseboard, + rightBaseboard, + ]); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 9f861bde..90b93723 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -1,3 +1,5 @@ export 'ball/ball.dart'; +export 'baseboard/baseboard.dart'; +export 'effects/effects.dart'; export 'flipper/flipper.dart'; export 'layer/layer.dart'; diff --git a/packages/pinball_components/test/src/components/ball_test.dart b/packages/pinball_components/test/src/components/ball_test.dart index a9eb05ad..f2a54c68 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.5)); + expect(fixture.shape.radius, equals(2.25)); }, ); diff --git a/test/game/components/baseboard_test.dart b/packages/pinball_components/test/src/components/baseboard_test.dart similarity index 89% rename from test/game/components/baseboard_test.dart rename to packages/pinball_components/test/src/components/baseboard_test.dart index 37c3c978..b1ce58e2 100644 --- a/test/game/components/baseboard_test.dart +++ b/packages/pinball_components/test/src/components/baseboard_test.dart @@ -3,13 +3,16 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; +import '../../helpers/helpers.dart'; + void main() { group('Baseboard', () { + // TODO(allisonryan0002): Add golden tests. + TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(Forge2DGame.new); + final flameTester = FlameTester(TestGame.new); flameTester.test( 'loads correctly', @@ -62,14 +65,14 @@ void main() { group('fixtures', () { flameTester.test( - 'has six', + 'has seven', (game) async { final baseboard = Baseboard( side: BoardSide.left, ); await game.ensureAdd(baseboard); - expect(baseboard.body.fixtures.length, equals(6)); + expect(baseboard.body.fixtures.length, equals(7)); }, ); }); diff --git a/packages/pinball_components/test/src/components/board_dimensions_test.dart b/packages/pinball_components/test/src/components/board_dimensions_test.dart new file mode 100644 index 00000000..afd4a2d8 --- /dev/null +++ b/packages/pinball_components/test/src/components/board_dimensions_test.dart @@ -0,0 +1,27 @@ +import 'package:flame/extensions.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/pinball_components.dart'; + +void main() { + group('BoardDimensions', () { + test('has size', () { + expect(BoardDimensions.size, equals(Vector2(101.6, 143.8))); + }); + + test('has bounds', () { + expect(BoardDimensions.bounds, isNotNull); + }); + + test('has perspectiveAngle', () { + expect(BoardDimensions.perspectiveAngle, isNotNull); + }); + + test('has perspectiveShrinkFactor', () { + expect(BoardDimensions.perspectiveShrinkFactor, equals(0.63)); + }); + + test('has shrinkAdjustedHeight', () { + expect(BoardDimensions.shrinkAdjustedHeight, isNotNull); + }); + }); +}