From 07ddb1f7b6846c99fc1a7cf1f7313833f98c756f Mon Sep 17 00:00:00 2001 From: Alejandro Santiago Date: Thu, 31 Mar 2022 14:44:47 +0100 Subject: [PATCH 1/6] refactor: made ball controller listen to bloc (#116) * refactor: included BonusBallController * feat: made LaunchedBallControler react to states * refactor: removed isLastBall * fix: solved tests * fix: solved BonusLetterActivated test * refactor: used ensureAdd --- lib/game/bloc/game_state.dart | 3 - lib/game/components/controlled_ball.dart | 49 +++-- test/game/bloc/game_state_test.dart | 32 --- test/game/components/bonus_word_test.dart | 7 +- .../game/components/controlled_ball_test.dart | 192 ++++++++++++------ test/helpers/test_game.dart | 3 +- 6 files changed, 164 insertions(+), 122 deletions(-) diff --git a/lib/game/bloc/game_state.dart b/lib/game/bloc/game_state.dart index 5c722946..d08ba04b 100644 --- a/lib/game/bloc/game_state.dart +++ b/lib/game/bloc/game_state.dart @@ -55,9 +55,6 @@ class GameState extends Equatable { /// Determines when the game is over. bool get isGameOver => balls == 0; - /// Determines when the player has only one ball left. - bool get isLastBall => balls == 1; - /// Shortcut method to check if the given [i] /// is activated. bool isLetterActivated(int i) => activatedBonusLetters.contains(i); diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index 463c158f..257d4f1d 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -1,4 +1,5 @@ import 'package:flame/components.dart'; +import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/forge2d_game.dart'; import 'package:flutter/material.dart'; import 'package:pinball/flame/flame.dart'; @@ -28,19 +29,19 @@ class ControlledBall extends Ball with Controls { ControlledBall.bonus({ required PinballTheme theme, }) : super(baseColor: theme.characterTheme.ballColor) { - controller = BallController(this); + controller = BonusBallController(this); } /// [Ball] used in [DebugPinballGame]. ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) { - controller = BallController(this); + controller = BonusBallController(this); } } /// {@template ball_controller} /// Controller attached to a [Ball] that handles its game related logic. /// {@endtemplate} -class BallController extends ComponentController { +abstract class BallController extends ComponentController { /// {@macro ball_controller} BallController(Ball ball) : super(ball); @@ -50,30 +51,52 @@ class BallController extends ComponentController { /// Triggered by [BottomWallBallContactCallback] when the [Ball] falls into /// a [BottomWall]. /// {@endtemplate} - @mustCallSuper + void lost(); +} + +/// {@template bonus_ball_controller} +/// {@macro ball_controller} +/// +/// A [BonusBallController] doesn't change the [GameState.balls] count. +/// {@endtemplate} +class BonusBallController extends BallController { + /// {@macro bonus_ball_controller} + BonusBallController(Ball component) : super(component); + + @override void lost() { component.shouldRemove = true; } } +/// {@template launched_ball_controller} /// {@macro ball_controller} +/// +/// A [LaunchedBallController] changes the [GameState.balls] count. +/// {@endtemplate} class LaunchedBallController extends BallController - with HasGameRef { - /// {@macro ball_controller} + with HasGameRef, BlocComponent { + /// {@macro launched_ball_controller} LaunchedBallController(Ball ball) : super(ball); + @override + bool listenWhen(GameState? previousState, GameState newState) { + return (previousState?.balls ?? 0) > newState.balls; + } + + @override + void onNewState(GameState state) { + super.onNewState(state); + component.shouldRemove = true; + if (state.balls > 1) gameRef.spawnBall(); + } + /// Removes the [Ball] from a [PinballGame]; spawning a new [Ball] if /// any are left. /// /// {@macro ball_controller_lost} @override void lost() { - super.lost(); - - final bloc = gameRef.read()..add(const BallLost()); - - // TODO(alestiago): Consider the use of onNewState instead. - final shouldBallRespwan = !bloc.state.isLastBall && !bloc.state.isGameOver; - if (shouldBallRespwan) gameRef.spawnBall(); + gameRef.read().add(const BallLost()); } } diff --git a/test/game/bloc/game_state_test.dart b/test/game/bloc/game_state_test.dart index 9ca913ab..ed80d192 100644 --- a/test/game/bloc/game_state_test.dart +++ b/test/game/bloc/game_state_test.dart @@ -103,38 +103,6 @@ void main() { }); }); - group('isLastBall', () { - test( - 'is true ' - 'when there is only one ball left', - () { - const gameState = GameState( - balls: 1, - score: 0, - activatedBonusLetters: [], - activatedDashNests: {}, - bonusHistory: [], - ); - expect(gameState.isLastBall, isTrue); - }, - ); - - test( - 'is false ' - 'when there are more balls left', - () { - const gameState = GameState( - balls: 2, - score: 0, - activatedBonusLetters: [], - activatedDashNests: {}, - bonusHistory: [], - ); - expect(gameState.isLastBall, isFalse); - }, - ); - }); - group('isLetterActivated', () { test( 'is true when the letter is activated', diff --git a/test/game/components/bonus_word_test.dart b/test/game/components/bonus_word_test.dart index f02adceb..f48d60ee 100644 --- a/test/game/components/bonus_word_test.dart +++ b/test/game/components/bonus_word_test.dart @@ -196,7 +196,7 @@ void main() { group('bonus letter activation', () { late GameBloc gameBloc; - final tester = flameBlocTester( + final tester = flameBlocTester( // TODO(alestiago): Use TestGame once BonusLetter has controller. game: PinballGameTest.create, gameBloc: () => gameBloc, @@ -217,13 +217,8 @@ void main() { await game.ready(); final bonusLetter = game.descendants().whereType().first; - await game.add(bonusLetter); - await game.ready(); - bonusLetter.activate(); await game.ready(); - - await tester.pump(); }, verify: (game, tester) async { verify(() => gameBloc.add(const BonusLetterActivated(0))).called(1); diff --git a/test/game/components/controlled_ball_test.dart b/test/game/components/controlled_ball_test.dart index 9cf1dd7e..dcd075ca 100644 --- a/test/game/components/controlled_ball_test.dart +++ b/test/game/components/controlled_ball_test.dart @@ -15,20 +15,26 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(PinballGameTest.create); - group('BallController', () { + group('BonusBallController', () { late Ball ball; setUp(() { ball = Ball(baseColor: const Color(0xFF00FFFF)); }); + test('can be instantiated', () { + expect( + BonusBallController(ball), + isA(), + ); + }); + flameTester.test( 'lost removes ball', (game) async { await game.add(ball); - final controller = BallController(ball); - await ball.add(controller); - await game.ready(); + final controller = BonusBallController(ball); + await ball.ensureAdd(controller); controller.lost(); await game.ready(); @@ -39,13 +45,20 @@ void main() { }); group('LaunchedBallController', () { - group('lost', () { - late GameBloc gameBloc; + test('can be instantiated', () { + expect( + LaunchedBallController(MockBall()), + isA(), + ); + }); + + group('description', () { late Ball ball; + late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); ball = Ball(baseColor: const Color(0xFF00FFFF)); + gameBloc = MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -59,81 +72,126 @@ void main() { ); tester.testGameWidget( - 'removes ball', - verify: (game, tester) async { - await game.add(ball); + 'lost adds BallLost to GameBloc', + setUp: (game, tester) async { final controller = LaunchedBallController(ball); await ball.add(controller); - await game.ready(); + await game.ensureAdd(ball); controller.lost(); - await game.ready(); - - expect(game.contains(ball), isFalse); }, - ); - - tester.testGameWidget( - 'adds BallLost to GameBloc', verify: (game, tester) async { - final controller = LaunchedBallController(ball); - await ball.add(controller); - await game.add(ball); - await game.ready(); - - controller.lost(); - verify(() => gameBloc.add(const BallLost())).called(1); }, ); - tester.testGameWidget( - 'adds a new ball if the game is not over', - verify: (game, tester) async { - final controller = LaunchedBallController(ball); - await ball.add(controller); - await game.add(ball); - await game.ready(); + group('listenWhen', () { + tester.testGameWidget( + 'listens when a ball has been lost', + setUp: (game, tester) async { + final controller = LaunchedBallController(ball); + + await ball.add(controller); + await game.ensureAdd(ball); + }, + verify: (game, tester) async { + final controller = + game.descendants().whereType().first; + + final previousState = MockGameState(); + final newState = MockGameState(); + when(() => previousState.balls).thenReturn(3); + when(() => newState.balls).thenReturn(2); + + expect(controller.listenWhen(previousState, newState), isTrue); + }, + ); - final previousBalls = game.descendants().whereType().length; - controller.lost(); - await game.ready(); - final currentBalls = game.descendants().whereType().length; + tester.testGameWidget( + 'does not listen when a ball has not been lost', + setUp: (game, tester) async { + final controller = LaunchedBallController(ball); + + await ball.add(controller); + await game.ensureAdd(ball); + }, + verify: (game, tester) async { + final controller = + game.descendants().whereType().first; + + final previousState = MockGameState(); + final newState = MockGameState(); + when(() => previousState.balls).thenReturn(3); + when(() => newState.balls).thenReturn(3); + + expect(controller.listenWhen(previousState, newState), isFalse); + }, + ); + }); - expect(previousBalls, equals(currentBalls)); - }, - ); + group('onNewState', () { + tester.testGameWidget( + 'removes ball', + setUp: (game, tester) async { + final controller = LaunchedBallController(ball); + await ball.add(controller); + await game.ensureAdd(ball); + + final state = MockGameState(); + when(() => state.balls).thenReturn(1); + controller.onNewState(state); + await game.ready(); + }, + verify: (game, tester) async { + expect(game.contains(ball), isFalse); + }, + ); - tester.testGameWidget( - 'no ball is added on game over', - verify: (game, tester) async { - whenListen( - gameBloc, - const Stream.empty(), - initialState: const GameState( - score: 10, - balls: 1, - activatedBonusLetters: [], - activatedDashNests: {}, - bonusHistory: [], - ), - ); - final controller = BallController(ball); - await ball.add(controller); - await game.add(ball); - await game.ready(); + tester.testGameWidget( + 'spawns a new ball when the ball is not the last one', + setUp: (game, tester) async { + final controller = LaunchedBallController(ball); + await ball.add(controller); + await game.ensureAdd(ball); - final previousBalls = game.descendants().whereType().toList(); - controller.lost(); - await game.ready(); - final currentBalls = game.descendants().whereType().length; + final state = MockGameState(); + when(() => state.balls).thenReturn(2); - expect( - currentBalls, - equals((previousBalls..remove(ball)).length), - ); - }, - ); + final previousBalls = game.descendants().whereType().toList(); + controller.onNewState(state); + await game.ready(); + + final currentBalls = game.descendants().whereType(); + + expect(currentBalls.contains(ball), isFalse); + expect(currentBalls.length, equals(previousBalls.length)); + }, + ); + + tester.testGameWidget( + 'does not spawn a new ball is the last one', + setUp: (game, tester) async { + final controller = LaunchedBallController(ball); + await ball.add(controller); + await game.ensureAdd(ball); + + final state = MockGameState(); + when(() => state.balls).thenReturn(1); + + final previousBalls = game.descendants().whereType().toList(); + controller.onNewState(state); + await game.ready(); + + final currentBalls = game.descendants().whereType(); + + expect(currentBalls.contains(ball), isFalse); + expect( + currentBalls.length, + equals((previousBalls..remove(ball)).length), + ); + }, + ); + }); }); }); } diff --git a/test/helpers/test_game.dart b/test/helpers/test_game.dart index a1219868..3c6ff42f 100644 --- a/test/helpers/test_game.dart +++ b/test/helpers/test_game.dart @@ -1,6 +1,7 @@ +import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -class TestGame extends Forge2DGame { +class TestGame extends Forge2DGame with FlameBloc { TestGame() { images.prefix = ''; } From 930c7fa001811d7348b04aed1a53d529faa47b56 Mon Sep 17 00:00:00 2001 From: Alejandro Santiago Date: Thu, 31 Mar 2022 15:17:31 +0100 Subject: [PATCH 2/6] refactor: used new createJoint method (#117) --- lib/game/components/chrome_dino.dart | 14 +------------- .../lib/src/components/flipper.dart | 14 +------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/lib/game/components/chrome_dino.dart b/lib/game/components/chrome_dino.dart index dc280350..af086e0e 100644 --- a/lib/game/components/chrome_dino.dart +++ b/lib/game/components/chrome_dino.dart @@ -31,7 +31,7 @@ class ChromeDino extends BodyComponent with InitialPosition { anchor: anchor, ); final joint = _ChromeDinoJoint(jointDef); - world.createJoint2(joint); + world.createJoint(joint); return joint; } @@ -154,15 +154,3 @@ class _ChromeDinoJoint extends RevoluteJoint { setMotorSpeed(-motorSpeed); } } - -extension on World { - // TODO(alestiago): Remove once Forge2D supports custom joints. - void createJoint2(Joint joint) { - assert(!isLocked, ''); - - joints.add(joint); - - joint.bodyA.joints.add(joint); - joint.bodyB.joints.add(joint); - } -} diff --git a/packages/pinball_components/lib/src/components/flipper.dart b/packages/pinball_components/lib/src/components/flipper.dart index de5f18c8..49bd6d6f 100644 --- a/packages/pinball_components/lib/src/components/flipper.dart +++ b/packages/pinball_components/lib/src/components/flipper.dart @@ -68,7 +68,7 @@ class Flipper extends BodyComponent with KeyboardHandler, InitialPosition { anchor: anchor, ); final joint = _FlipperJoint(jointDef); - world.createJoint2(joint); + world.createJoint(joint); unawaited(mounted.whenComplete(joint.unlock)); } @@ -219,15 +219,3 @@ class _FlipperJoint extends RevoluteJoint { setLimits(-angle, angle); } } - -// TODO(alestiago): Remove once Forge2D supports custom joints. -extension on World { - void createJoint2(Joint joint) { - assert(!isLocked, ''); - - joints.add(joint); - - joint.bodyA.joints.add(joint); - joint.bodyB.joints.add(joint); - } -} From 83e6cb892ba6ab18b064e2e485d1690250bb2a74 Mon Sep 17 00:00:00 2001 From: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:45:39 -0500 Subject: [PATCH 3/6] feat: dynamic ball size (#113) * feat: scale ball and add ball asset * refactor: increase plunger properties * test: board dimensions * refactor: store adjusted height * chore: add todo --- lib/game/components/board.dart | 8 ++--- lib/game/components/jetpack_ramp.dart | 4 +-- lib/game/components/launcher_ramp.dart | 8 ++--- lib/game/components/plunger.dart | 11 +++---- lib/game/components/wall.dart | 14 ++++----- lib/game/pinball_game.dart | 17 +++------- .../pinball_components/assets/images/ball.png | Bin 27915 -> 3190 bytes .../lib/src/components/ball.dart | 23 ++++++++++++-- .../lib/src/components/board_dimensions.dart | 29 ++++++++++++++++++ .../lib/src/components/components.dart | 1 + .../test/src/components/ball_test.dart | 2 +- .../src/components/board_dimensions_test.dart | 27 ++++++++++++++++ 12 files changed, 103 insertions(+), 41 deletions(-) create mode 100644 packages/pinball_components/lib/src/components/board_dimensions.dart create mode 100644 packages/pinball_components/test/src/components/board_dimensions_test.dart diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index f022862c..42183c5f 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -15,8 +15,8 @@ class Board extends Component { // TODO(alestiago): adjust positioning once sprites are added. final bottomGroup = _BottomGroup( position: Vector2( - PinballGame.boardBounds.center.dx, - PinballGame.boardBounds.bottom + 10, + BoardDimensions.bounds.center.dx, + BoardDimensions.bounds.bottom + 10, ), spacing: 2, ); @@ -26,8 +26,8 @@ class Board extends Component { // 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([ 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/pinball_game.dart b/lib/game/pinball_game.dart index 514c589c..c2bbe8e0 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(); @@ -80,7 +70,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); } @@ -88,8 +79,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 af80811b138b9834be6812cbc44e277639d0be51..43332c9aba015855ea7d77252cd9b3c6ca339e38 100644 GIT binary patch literal 3190 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 Q;70=FiS>1_#f0Vj56Hwch5!Hn literal 27915 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 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/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..84f956b2 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -1,4 +1,5 @@ export 'ball.dart'; +export 'board_dimensions.dart'; export 'board_side.dart'; export 'fire_effect.dart'; export 'flipper.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/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); + }); + }); +} From 90588d95c4ce8053c1a67b67ce0cd9392961d365 Mon Sep 17 00:00:00 2001 From: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> Date: Thu, 31 Mar 2022 11:44:10 -0500 Subject: [PATCH 4/6] feat: add `Baseboard` assets (#106) * feat: add baseboard assets * refactor: move to components package * test: coverage fix * chore: small suggestions * refactor: adjust size * style: make angle readable --- lib/game/components/board.dart | 52 ++++----------- lib/game/components/components.dart | 1 - lib/game/game_assets.dart | 2 + .../assets/images/baseboard/left.png | Bin 0 -> 64521 bytes .../assets/images/baseboard/right.png | Bin 0 -> 65135 bytes .../lib/gen/assets.gen.dart | 14 ++++ .../lib/src}/components/baseboard.dart | 61 ++++++++++++------ .../lib/src/components/components.dart | 1 + packages/pinball_components/pubspec.yaml | 1 + .../pinball_components/sandbox/lib/main.dart | 2 +- .../lib/stories/baseboard/baseboard.dart | 15 +++++ .../sandbox/lib/stories/baseboard/basic.dart | 26 ++++++++ .../sandbox/lib/stories/stories.dart | 2 + .../test/src}/components/baseboard_test.dart | 11 ++-- 14 files changed, 124 insertions(+), 64 deletions(-) create mode 100644 packages/pinball_components/assets/images/baseboard/left.png create mode 100644 packages/pinball_components/assets/images/baseboard/right.png rename {lib/game => packages/pinball_components/lib/src}/components/baseboard.dart (59%) create mode 100644 packages/pinball_components/sandbox/lib/stories/baseboard/baseboard.dart create mode 100644 packages/pinball_components/sandbox/lib/stories/baseboard/basic.dart rename {test/game => packages/pinball_components/test/src}/components/baseboard_test.dart (89%) diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index 42183c5f..e71d5ede 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -12,14 +12,7 @@ class Board extends Component { @override Future onLoad() async { - // TODO(alestiago): adjust positioning once sprites are added. - final bottomGroup = _BottomGroup( - position: Vector2( - BoardDimensions.bounds.center.dx, - BoardDimensions.bounds.bottom + 10, - ), - spacing: 2, - ); + final bottomGroup = _BottomGroup(); final flutterForest = FlutterForest(); @@ -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/game_assets.dart b/lib/game/game_assets.dart index 73aae25f..ee7b7900 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), ]); } 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 0000000000000000000000000000000000000000..17253554a856ba69be74aafc68eecf99e3a2b93e GIT binary patch literal 64521 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

w$g%c3#H@Y3oc1RVf)x7{{=`XB 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%0AiZir?$3Q%q2#i{*Wg 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

q7-UaWDhNkRGxodQS)0J)(l-rQ?m=^+~ zl6cltp)GM+j_2hl_D_#ETQ)Pi6{qC3AA=&PFn1Ikr&soa>|59UwN`#CtACzS}t}S*@G4 zZOk_)txzr#xrDuSXDm2)w|1muv*O70nC&MWo&I!)%5l~p+UI9bN|0ga<$L=A`M!S$ zvi?-zZI08ND~(+nx^AUDe%&O%k3~IUMWLO6UWotS&;Gx?1qD=gify`+7Do9_=zoB| 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/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/components.dart b/packages/pinball_components/lib/src/components/components.dart index 84f956b2..a475f91e 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -1,4 +1,5 @@ export 'ball.dart'; +export 'baseboard.dart'; export 'board_dimensions.dart'; export 'board_side.dart'; export 'fire_effect.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/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)); }, ); }); From 8b866564120658c5bcdd6d003e91264f238d0a70 Mon Sep 17 00:00:00 2001 From: Rui Miguel Alonso Date: Fri, 1 Apr 2022 00:21:29 +0200 Subject: [PATCH 5/6] refactor: priority layer (#83) * refactor: removed findNested extensions (#77) * feat: added new Elevation for manage priority of BodyComponents * refactor: changed ball with Elevated * refactor: changed spaceship with Elevated * test: tests for Elevated * test: fix tests * chore: removed unused * test: fixed tests * refactor: changed Elevated mixin to Priority extension * test: fixed priority test changes * chore: ignore for file * test: fixed tests for PriorityX * chore: unused import * chore: removed unecessary ignore * refactor: removed unnecessary comma Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> * refactor: fixed grammatical error in test named Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> * refactor: moved priority set to constructors * chore: tests names * doc: doc priority * refactor: moved priority to flame dir * feat: added priority to rampopening * fix: fixed priority changes * test: fixed tests for spaceship priority changes * fix: fixed tests for priority * chore: renamed pathwayLayer and pathwayPriority to inside * Update packages/pinball_components/lib/src/components/ramp_opening.dart Co-authored-by: Alejandro Santiago Co-authored-by: Alejandro Santiago Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> --- lib/game/components/jetpack_ramp.dart | 2 +- lib/game/components/launcher_ramp.dart | 2 +- lib/game/components/spaceship_exit_rail.dart | 2 +- .../lib/src/components/ramp_opening.dart | 44 ++-- .../lib/src/components/spaceship.dart | 47 ++-- .../lib/src/flame/flame.dart | 1 + .../lib/src/flame/priority.dart | 39 ++++ .../test/helpers/mocks.dart | 3 + .../src/components/ramp_opening_test.dart | 34 +-- .../test/src/components/spaceship_test.dart | 35 +-- .../test/src/flame/priority_test.dart | 221 ++++++++++++++++++ test/helpers/mocks.dart | 4 - 12 files changed, 335 insertions(+), 99 deletions(-) create mode 100644 packages/pinball_components/lib/src/flame/priority.dart create mode 100644 packages/pinball_components/test/src/flame/priority_test.dart diff --git a/lib/game/components/jetpack_ramp.dart b/lib/game/components/jetpack_ramp.dart index 4c4c8be9..aa5a9dbd 100644 --- a/lib/game/components/jetpack_ramp.dart +++ b/lib/game/components/jetpack_ramp.dart @@ -107,7 +107,7 @@ class _JetpackRampOpening extends RampOpening { required double rotation, }) : _rotation = rotation, super( - pathwayLayer: Layer.jetpack, + insideLayer: Layer.jetpack, outsideLayer: outsideLayer, orientation: RampOrientation.down, ); diff --git a/lib/game/components/launcher_ramp.dart b/lib/game/components/launcher_ramp.dart index 79b7c831..c05f8aa2 100644 --- a/lib/game/components/launcher_ramp.dart +++ b/lib/game/components/launcher_ramp.dart @@ -122,7 +122,7 @@ class _LauncherRampOpening extends RampOpening { required double rotation, }) : _rotation = rotation, super( - pathwayLayer: Layer.launcher, + insideLayer: Layer.launcher, orientation: RampOrientation.down, ); diff --git a/lib/game/components/spaceship_exit_rail.dart b/lib/game/components/spaceship_exit_rail.dart index 0dc38322..4a6c44cd 100644 --- a/lib/game/components/spaceship_exit_rail.dart +++ b/lib/game/components/spaceship_exit_rail.dart @@ -169,7 +169,7 @@ class SpaceshipExitRailEnd extends RampOpening { /// {@macro spaceship_exit_rail_end} SpaceshipExitRailEnd() : super( - pathwayLayer: Layer.spaceshipExitRail, + insideLayer: Layer.spaceshipExitRail, orientation: RampOrientation.down, ) { layer = Layer.spaceshipExitRail; diff --git a/packages/pinball_components/lib/src/components/ramp_opening.dart b/packages/pinball_components/lib/src/components/ramp_opening.dart index 8f33e813..cb6066f2 100644 --- a/packages/pinball_components/lib/src/components/ramp_opening.dart +++ b/packages/pinball_components/lib/src/components/ramp_opening.dart @@ -20,28 +20,41 @@ enum RampOrientation { /// [RampOpeningBallContactCallback] detects when a [Ball] passes /// through this opening. /// -/// By default the base [layer] is set to [Layer.board]. +/// By default the base [layer] is set to [Layer.board] and the +/// [outsidePriority] is set to the lowest possible [Layer]. /// {@endtemplate} // TODO(ruialonso): Consider renaming the class. abstract class RampOpening extends BodyComponent with InitialPosition, Layered { /// {@macro ramp_opening} RampOpening({ - required Layer pathwayLayer, + required Layer insideLayer, Layer? outsideLayer, + int? insidePriority, + int? outsidePriority, required this.orientation, - }) : _pathwayLayer = pathwayLayer, - _outsideLayer = outsideLayer ?? Layer.board { - layer = Layer.board; + }) : _insideLayer = insideLayer, + _outsideLayer = outsideLayer ?? Layer.board, + _insidePriority = insidePriority ?? 0, + _outsidePriority = outsidePriority ?? 0 { + layer = Layer.opening; } - final Layer _pathwayLayer; + final Layer _insideLayer; final Layer _outsideLayer; + final int _insidePriority; + final int _outsidePriority; - /// Mask of category bits for collision inside pathway. - Layer get pathwayLayer => _pathwayLayer; + /// Mask of category bits for collision inside ramp. + Layer get insideLayer => _insideLayer; - /// Mask of category bits for collision outside pathway. + /// Mask of category bits for collision outside ramp. Layer get outsideLayer => _outsideLayer; + /// Priority for the [Ball] inside ramp. + int get insidePriority => _insidePriority; + + /// Priority for the [Ball] outside ramp. + int get outsidePriority => _outsidePriority; + /// The [Shape] of the [RampOpening]. Shape get shape; @@ -64,8 +77,7 @@ abstract class RampOpening extends BodyComponent with InitialPosition, Layered { } /// {@template ramp_opening_ball_contact_callback} -/// Detects when a [Ball] enters or exits a pathway ramp through a -/// [RampOpening]. +/// Detects when a [Ball] enters or exits a ramp through a [RampOpening]. /// /// Modifies [Ball]'s [Layer] accordingly depending on whether the [Ball] is /// outside or inside a ramp. @@ -80,9 +92,11 @@ class RampOpeningBallContactCallback Layer layer; if (!_ballsInside.contains(ball)) { - layer = opening.pathwayLayer; + layer = opening.insideLayer; _ballsInside.add(ball); - ball.layer = layer; + ball + ..sendTo(opening.insidePriority) + ..layer = layer; } else { _ballsInside.remove(ball); } @@ -103,7 +117,9 @@ class RampOpeningBallContactCallback ball.body.linearVelocity.y > 0); if (isBallOutsideOpening) { - ball.layer = opening.outsideLayer; + ball + ..sendTo(opening.outsidePriority) + ..layer = opening.outsideLayer; _ballsInside.remove(ball); } } diff --git a/packages/pinball_components/lib/src/components/spaceship.dart b/packages/pinball_components/lib/src/components/spaceship.dart index 7e9d097e..4d84eb68 100644 --- a/packages/pinball_components/lib/src/components/spaceship.dart +++ b/packages/pinball_components/lib/src/components/spaceship.dart @@ -21,6 +21,9 @@ class Spaceship extends Forge2DBlueprint { /// The [position] where the elements will be created final Vector2 position; + /// Base priority for wall while be on spaceship. + static const ballPriorityWhenOnSpaceship = 4; + @override void build(_) { addAllContactCallback([ @@ -33,8 +36,8 @@ class Spaceship extends Forge2DBlueprint { SpaceshipEntrance()..initialPosition = position, AndroidHead()..initialPosition = position, SpaceshipHole( - onExitLayer: Layer.spaceshipExitRail, - onExitElevation: 2, + outsideLayer: Layer.spaceshipExitRail, + outsidePriority: 2, )..initialPosition = position - Vector2(5.2, 4.8), SpaceshipHole()..initialPosition = position - Vector2(-7.2, 0.8), SpaceshipWall()..initialPosition = position, @@ -47,8 +50,8 @@ class Spaceship extends Forge2DBlueprint { /// {@endtemplate} class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_saucer} - // TODO(ruimiguel): apply Elevated when PR merged. - SpaceshipSaucer() : super(priority: 3) { + SpaceshipSaucer() + : super(priority: Spaceship.ballPriorityWhenOnSpaceship - 1) { layer = Layer.spaceship; } @@ -92,7 +95,7 @@ class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered { /// {@endtemplate} class AndroidHead extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_bridge} - AndroidHead() : super(priority: 4) { + AndroidHead() : super(priority: Spaceship.ballPriorityWhenOnSpaceship + 1) { layer = Layer.spaceship; } @@ -147,16 +150,13 @@ class SpaceshipEntrance extends RampOpening { /// {@macro spaceship_entrance} SpaceshipEntrance() : super( - pathwayLayer: Layer.spaceship, + insideLayer: Layer.spaceship, orientation: RampOrientation.up, + insidePriority: Spaceship.ballPriorityWhenOnSpaceship, ) { layer = Layer.spaceship; } - /// Priority order for [SpaceshipHole] on enter. - // TODO(ruimiguel): apply Elevated when PR merged. - final int onEnterElevation = 4; - @override Shape get shape { renderBody = false; @@ -181,19 +181,17 @@ class SpaceshipEntrance extends RampOpening { /// {@endtemplate} class SpaceshipHole extends RampOpening { /// {@macro spaceship_hole} - SpaceshipHole({Layer? onExitLayer, this.onExitElevation = 1}) + SpaceshipHole({Layer? outsideLayer, int? outsidePriority = 1}) : super( - pathwayLayer: Layer.spaceship, - outsideLayer: onExitLayer, + insideLayer: Layer.spaceship, + outsideLayer: outsideLayer, + outsidePriority: outsidePriority, orientation: RampOrientation.up, ) { + renderBody = false; layer = Layer.spaceship; } - /// Priority order for [SpaceshipHole] on exit. - // TODO(ruimiguel): apply Elevated when PR merged. - final int onExitElevation; - @override Shape get shape { return ArcShape( @@ -235,8 +233,7 @@ class _SpaceshipWallShape extends ChainShape { /// {@endtemplate} class SpaceshipWall extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_wall} - // TODO(ruimiguel): apply Elevated when PR merged - SpaceshipWall() : super(priority: 4) { + SpaceshipWall() : super(priority: Spaceship.ballPriorityWhenOnSpaceship + 1) { layer = Layer.spaceship; } @@ -269,9 +266,7 @@ class SpaceshipEntranceBallContactCallback @override void begin(SpaceshipEntrance entrance, Ball ball, _) { ball - // TODO(ruimiguel): apply Elevated when PR merged. - ..priority = entrance.onEnterElevation - ..gameRef.reorderChildren() + ..sendTo(entrance.insidePriority) ..layer = Layer.spaceship; } } @@ -279,16 +274,14 @@ class SpaceshipEntranceBallContactCallback /// [ContactCallback] that handles the contact between the [Ball] /// and a [SpaceshipHole]. /// -/// It sets the [Ball] priority and filter data so it will "be back" on the -/// board. +/// It sets the [Ball] priority and filter data so it will outside of the +/// [Spaceship]. class SpaceshipHoleBallContactCallback extends ContactCallback { @override void begin(SpaceshipHole hole, Ball ball, _) { ball - // TODO(ruimiguel): apply Elevated when PR merged. - ..priority = hole.onExitElevation - ..gameRef.reorderChildren() + ..sendTo(hole.outsidePriority) ..layer = hole.outsideLayer; } } diff --git a/packages/pinball_components/lib/src/flame/flame.dart b/packages/pinball_components/lib/src/flame/flame.dart index c46a6fd2..9af8dba6 100644 --- a/packages/pinball_components/lib/src/flame/flame.dart +++ b/packages/pinball_components/lib/src/flame/flame.dart @@ -1 +1,2 @@ export 'blueprint.dart'; +export 'priority.dart'; diff --git a/packages/pinball_components/lib/src/flame/priority.dart b/packages/pinball_components/lib/src/flame/priority.dart new file mode 100644 index 00000000..f4dccabf --- /dev/null +++ b/packages/pinball_components/lib/src/flame/priority.dart @@ -0,0 +1,39 @@ +import 'dart:math' as math; +import 'package:flame/components.dart'; + +/// Helper methods to change the [priority] of a [Component]. +extension ComponentPriorityX on Component { + static const _lowestPriority = 0; + + /// Changes the priority to a specific one. + void sendTo(int destinationPriority) { + if (priority != destinationPriority) { + priority = math.max(destinationPriority, _lowestPriority); + reorderChildren(); + } + } + + /// Changes the priority to the lowest possible. + void sendToBack() { + if (priority != _lowestPriority) { + priority = _lowestPriority; + reorderChildren(); + } + } + + /// Decreases the priority to be lower than another [Component]. + void showBehindOf(Component other) { + if (priority >= other.priority) { + priority = math.max(other.priority - 1, _lowestPriority); + reorderChildren(); + } + } + + /// Increases the priority to be higher than another [Component]. + void showInFrontOf(Component other) { + if (priority <= other.priority) { + priority = other.priority + 1; + reorderChildren(); + } + } +} diff --git a/packages/pinball_components/test/helpers/mocks.dart b/packages/pinball_components/test/helpers/mocks.dart index 8d6f45b3..c36afff2 100644 --- a/packages/pinball_components/test/helpers/mocks.dart +++ b/packages/pinball_components/test/helpers/mocks.dart @@ -1,5 +1,6 @@ import 'dart:ui'; +import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -24,3 +25,5 @@ class MockContact extends Mock implements Contact {} class MockContactCallback extends Mock implements ContactCallback {} + +class MockComponent extends Mock implements Component {} diff --git a/packages/pinball_components/test/src/components/ramp_opening_test.dart b/packages/pinball_components/test/src/components/ramp_opening_test.dart index c49e9164..cb42203a 100644 --- a/packages/pinball_components/test/src/components/ramp_opening_test.dart +++ b/packages/pinball_components/test/src/components/ramp_opening_test.dart @@ -12,7 +12,7 @@ class TestRampOpening extends RampOpening { required RampOrientation orientation, required Layer pathwayLayer, }) : super( - pathwayLayer: pathwayLayer, + insideLayer: pathwayLayer, orientation: orientation, ); @@ -129,14 +129,12 @@ void main() { final callback = TestRampOpeningBallContactCallback(); when(() => ball.body).thenReturn(body); + when(() => ball.priority).thenReturn(1); when(() => body.position).thenReturn(Vector2.zero()); when(() => ball.layer).thenReturn(Layer.board); - await game.ready(); - await game.ensureAdd(area); - callback.begin(ball, area, MockContact()); - verify(() => ball.layer = area.pathwayLayer).called(1); + verify(() => ball.layer = area.insideLayer).called(1); }); flameTester.test( @@ -152,14 +150,12 @@ void main() { final callback = TestRampOpeningBallContactCallback(); when(() => ball.body).thenReturn(body); + when(() => ball.priority).thenReturn(1); when(() => body.position).thenReturn(Vector2.zero()); when(() => ball.layer).thenReturn(Layer.board); - await game.ready(); - await game.ensureAdd(area); - callback.begin(ball, area, MockContact()); - verify(() => ball.layer = area.pathwayLayer).called(1); + verify(() => ball.layer = area.insideLayer).called(1); }); flameTester.test( @@ -174,15 +170,13 @@ void main() { final callback = TestRampOpeningBallContactCallback(); when(() => ball.body).thenReturn(body); + when(() => ball.priority).thenReturn(1); when(() => body.position).thenReturn(Vector2.zero()); when(() => body.linearVelocity).thenReturn(Vector2(0, -1)); when(() => ball.layer).thenReturn(Layer.board); - await game.ready(); - await game.ensureAdd(area); - callback.begin(ball, area, MockContact()); - verify(() => ball.layer = area.pathwayLayer).called(1); + verify(() => ball.layer = area.insideLayer).called(1); callback.end(ball, area, MockContact()); verify(() => ball.layer = Layer.board); @@ -200,15 +194,13 @@ void main() { final callback = TestRampOpeningBallContactCallback(); when(() => ball.body).thenReturn(body); + when(() => ball.priority).thenReturn(1); when(() => body.position).thenReturn(Vector2.zero()); when(() => body.linearVelocity).thenReturn(Vector2(0, 1)); when(() => ball.layer).thenReturn(Layer.board); - await game.ready(); - await game.ensureAdd(area); - callback.begin(ball, area, MockContact()); - verify(() => ball.layer = area.pathwayLayer).called(1); + verify(() => ball.layer = area.insideLayer).called(1); callback.end(ball, area, MockContact()); verify(() => ball.layer = Layer.board); @@ -226,21 +218,19 @@ void main() { final callback = TestRampOpeningBallContactCallback(); when(() => ball.body).thenReturn(body); + when(() => ball.priority).thenReturn(1); when(() => body.position).thenReturn(Vector2.zero()); when(() => body.linearVelocity).thenReturn(Vector2(0, 1)); when(() => ball.layer).thenReturn(Layer.board); - await game.ready(); - await game.ensureAdd(area); - callback.begin(ball, area, MockContact()); - verify(() => ball.layer = area.pathwayLayer).called(1); + verify(() => ball.layer = area.insideLayer).called(1); callback.end(ball, area, MockContact()); verifyNever(() => ball.layer = Layer.board); callback.begin(ball, area, MockContact()); - verifyNever(() => ball.layer = area.pathwayLayer); + verifyNever(() => ball.layer = area.insideLayer); callback.end(ball, area, MockContact()); verify(() => ball.layer = Layer.board); diff --git a/packages/pinball_components/test/src/components/spaceship_test.dart b/packages/pinball_components/test/src/components/spaceship_test.dart index f89408f7..4d980c69 100644 --- a/packages/pinball_components/test/src/components/spaceship_test.dart +++ b/packages/pinball_components/test/src/components/spaceship_test.dart @@ -59,7 +59,8 @@ void main() { group('SpaceshipEntranceBallContactCallback', () { test('changes the ball priority on contact', () { - when(() => entrance.onEnterElevation).thenReturn(3); + when(() => ball.priority).thenReturn(2); + when(() => entrance.insidePriority).thenReturn(3); SpaceshipEntranceBallContactCallback().begin( entrance, @@ -67,39 +68,15 @@ void main() { MockContact(), ); - verify(() => ball.priority = entrance.onEnterElevation).called(1); - }); - - test('re order the game children', () { - when(() => entrance.onEnterElevation).thenReturn(3); - - SpaceshipEntranceBallContactCallback().begin( - entrance, - ball, - MockContact(), - ); - - verify(game.reorderChildren).called(1); + verify(() => ball.sendTo(entrance.insidePriority)).called(1); }); }); group('SpaceshipHoleBallContactCallback', () { test('changes the ball priority on contact', () { + when(() => ball.priority).thenReturn(2); when(() => hole.outsideLayer).thenReturn(Layer.board); - when(() => hole.onExitElevation).thenReturn(1); - - SpaceshipHoleBallContactCallback().begin( - hole, - ball, - MockContact(), - ); - - verify(() => ball.priority = hole.onExitElevation).called(1); - }); - - test('re order the game children', () { - when(() => hole.outsideLayer).thenReturn(Layer.board); - when(() => hole.onExitElevation).thenReturn(1); + when(() => hole.outsidePriority).thenReturn(1); SpaceshipHoleBallContactCallback().begin( hole, @@ -107,7 +84,7 @@ void main() { MockContact(), ); - verify(game.reorderChildren).called(1); + verify(() => ball.sendTo(hole.outsidePriority)).called(1); }); }); }); diff --git a/packages/pinball_components/test/src/flame/priority_test.dart b/packages/pinball_components/test/src/flame/priority_test.dart new file mode 100644 index 00000000..231c7744 --- /dev/null +++ b/packages/pinball_components/test/src/flame/priority_test.dart @@ -0,0 +1,221 @@ +// ignore_for_file: cascade_invocations +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:pinball_components/src/flame/priority.dart'; + +import '../../helpers/helpers.dart'; + +class TestBodyComponent extends BodyComponent { + @override + Body createBody() { + final fixtureDef = FixtureDef(CircleShape()); + return world.createBody(BodyDef())..createFixture(fixtureDef); + } +} + +void main() { + final flameTester = FlameTester(Forge2DGame.new); + + group('ComponentPriorityX', () { + group('sendTo', () { + flameTester.test( + 'changes the priority correctly to other level', + (game) async { + const newPriority = 5; + final component = TestBodyComponent()..priority = 4; + + component.sendTo(newPriority); + + expect(component.priority, equals(newPriority)); + }, + ); + + flameTester.test( + 'calls reorderChildren if the new priority is different', + (game) async { + const newPriority = 5; + final component = MockComponent(); + when(() => component.priority).thenReturn(4); + + component.sendTo(newPriority); + + verify(component.reorderChildren).called(1); + }, + ); + + flameTester.test( + "doesn't call reorderChildren if the priority is the same", + (game) async { + const newPriority = 5; + final component = MockComponent(); + when(() => component.priority).thenReturn(newPriority); + + component.sendTo(newPriority); + + verifyNever(component.reorderChildren); + }, + ); + }); + + group('sendToBack', () { + flameTester.test( + 'changes the priority correctly to board level', + (game) async { + final component = TestBodyComponent()..priority = 4; + + component.sendToBack(); + + expect(component.priority, equals(0)); + }, + ); + + flameTester.test( + 'calls reorderChildren if the priority is greater than lowest level', + (game) async { + final component = MockComponent(); + when(() => component.priority).thenReturn(4); + + component.sendToBack(); + + verify(component.reorderChildren).called(1); + }, + ); + + flameTester.test( + "doesn't call reorderChildren if the priority is the lowest level", + (game) async { + final component = MockComponent(); + when(() => component.priority).thenReturn(0); + + component.sendToBack(); + + verifyNever(component.reorderChildren); + }, + ); + }); + + group('showBehindOf', () { + flameTester.test( + 'changes the priority if it is greater than other component', + (game) async { + const startPriority = 2; + final component = TestBodyComponent()..priority = startPriority; + final otherComponent = TestBodyComponent() + ..priority = startPriority - 1; + + component.showBehindOf(otherComponent); + + expect(component.priority, equals(otherComponent.priority - 1)); + }, + ); + + flameTester.test( + "doesn't change the priority if it is lower than other component", + (game) async { + const startPriority = 2; + final component = TestBodyComponent()..priority = startPriority; + final otherComponent = TestBodyComponent() + ..priority = startPriority + 1; + + component.showBehindOf(otherComponent); + + expect(component.priority, equals(startPriority)); + }, + ); + + flameTester.test( + 'calls reorderChildren if the priority is greater than other component', + (game) async { + const startPriority = 2; + final component = MockComponent(); + final otherComponent = MockComponent(); + when(() => component.priority).thenReturn(startPriority); + when(() => otherComponent.priority).thenReturn(startPriority - 1); + + component.showBehindOf(otherComponent); + + verify(component.reorderChildren).called(1); + }, + ); + + flameTester.test( + "doesn't call reorderChildren if the priority is lower than other " + 'component', + (game) async { + const startPriority = 2; + final component = MockComponent(); + final otherComponent = MockComponent(); + when(() => component.priority).thenReturn(startPriority); + when(() => otherComponent.priority).thenReturn(startPriority + 1); + + component.showBehindOf(otherComponent); + + verifyNever(component.reorderChildren); + }, + ); + }); + + group('showInFrontOf', () { + flameTester.test( + 'changes the priority if it is lower than other component', + (game) async { + const startPriority = 2; + final component = TestBodyComponent()..priority = startPriority; + final otherComponent = TestBodyComponent() + ..priority = startPriority + 1; + + component.showInFrontOf(otherComponent); + + expect(component.priority, equals(otherComponent.priority + 1)); + }, + ); + + flameTester.test( + "doesn't change the priority if it is greater than other component", + (game) async { + const startPriority = 2; + final component = TestBodyComponent()..priority = startPriority; + final otherComponent = TestBodyComponent() + ..priority = startPriority - 1; + + component.showInFrontOf(otherComponent); + + expect(component.priority, equals(startPriority)); + }, + ); + + flameTester.test( + 'calls reorderChildren if the priority is lower than other component', + (game) async { + const startPriority = 2; + final component = MockComponent(); + final otherComponent = MockComponent(); + when(() => component.priority).thenReturn(startPriority); + when(() => otherComponent.priority).thenReturn(startPriority + 1); + + component.showInFrontOf(otherComponent); + + verify(component.reorderChildren).called(1); + }, + ); + + flameTester.test( + "doesn't call reorderChildren if the priority is greater than other " + 'component', + (game) async { + const startPriority = 2; + final component = MockComponent(); + final otherComponent = MockComponent(); + when(() => component.priority).thenReturn(startPriority); + when(() => otherComponent.priority).thenReturn(startPriority - 1); + + component.showInFrontOf(otherComponent); + + verifyNever(component.reorderChildren); + }, + ); + }); + }); +} diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 9453c93a..fbe8edfb 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -66,10 +66,6 @@ class MockFilter extends Mock implements Filter {} class MockFixture extends Mock implements Fixture {} -class MockSpaceshipEntrance extends Mock implements SpaceshipEntrance {} - -class MockSpaceshipHole extends Mock implements SpaceshipHole {} - class MockSpaceshipExitRailEnd extends Mock implements SpaceshipExitRailEnd {} class MockComponentSet extends Mock implements ComponentSet {} From 48f831264e860156af4dcd2c6cc92a7b359c6592 Mon Sep 17 00:00:00 2001 From: Rui Miguel Alonso Date: Fri, 1 Apr 2022 10:20:37 +0200 Subject: [PATCH 6/6] feat: add dino wall (#115) * feat: added dino walls * refactor: moved board * fix: undo board movement * feat: fixing shapes for wall with asset * fix: placed dino wall asset and shapes * fix: fixed top wall shape * feat: added dino bottom wall * fix: show background * fix: fixed geometry test * test: added golden tests for dino wall * test: removed unused import * refactor: moved dino walls to pinball_components * chore: analysis errors * refactor: more analysis errors * chore: analysis error * test: added tests for dino walls * chore: unused import * test: refactored golden test * refactor: refactored vertices shapes * test: make dino wall private and removed golden tests for them Co-authored-by: Alejandro Santiago --- lib/game/components/wall.dart | 4 +- lib/game/game_assets.dart | 2 + lib/game/pinball_game.dart | 7 + lib/gen/assets.gen.dart | 3 + packages/geometry/lib/src/geometry.dart | 2 +- packages/geometry/test/src/geometry_test.dart | 8 +- .../assets/images/dino/dino-land-bottom.png | Bin 0 -> 11297 bytes .../assets/images/dino/dino-land-top.png | Bin 0 -> 16559 bytes .../lib/gen/assets.gen.dart | 14 +- .../lib/src/components/components.dart | 1 + .../lib/src/components/dino_walls.dart | 225 ++++++++++++++++++ packages/pinball_components/pubspec.yaml | 1 + .../test/src/components/dino_walls_test.dart | 28 +++ .../components/golden/dino-bottom-wall.png | Bin 0 -> 39312 bytes .../src/components/golden/dino-top-wall.png | Bin 0 -> 45600 bytes 15 files changed, 287 insertions(+), 8 deletions(-) create mode 100644 packages/pinball_components/assets/images/dino/dino-land-bottom.png create mode 100644 packages/pinball_components/assets/images/dino/dino-land-top.png create mode 100644 packages/pinball_components/lib/src/components/dino_walls.dart create mode 100644 packages/pinball_components/test/src/components/dino_walls_test.dart create mode 100644 packages/pinball_components/test/src/components/golden/dino-bottom-wall.png create mode 100644 packages/pinball_components/test/src/components/golden/dino-top-wall.png diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index f5d03c80..030edc50 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -2,8 +2,8 @@ import 'package:flame/extensions.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:pinball/game/components/components.dart'; -import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball/game/game.dart'; +import 'package:pinball_components/pinball_components.dart' hide Assets; /// {@template wall} /// A continuous generic and [BodyType.static] barrier that divides a game area. diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index ee7b7900..edfe7947 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -13,6 +13,8 @@ extension PinballGameAssetsX on PinballGame { 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(components.Assets.images.dino.dinoLandTop.keyName), + images.load(components.Assets.images.dino.dinoLandBottom.keyName), images.load(Assets.images.components.background.path), ]); } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index c2bbe8e0..b5162053 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -66,6 +66,13 @@ class PinballGame extends Forge2DGame Future _addGameBoundaries() async { await add(BottomWall()); createBoundaries(this).forEach(add); + unawaited( + addFromBlueprint( + DinoWalls( + position: Vector2(-2.4, 0), + ), + ), + ); } Future _addPlunger() async { diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 370d8fcf..97be7f3e 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -3,6 +3,8 @@ /// FlutterGen /// ***************************************************** +// ignore_for_file: directives_ordering,unnecessary_import + import 'package:flutter/widgets.dart'; class $AssetsImagesGen { @@ -15,6 +17,7 @@ class $AssetsImagesGen { class $AssetsImagesComponentsGen { const $AssetsImagesComponentsGen(); + /// File path: assets/images/components/background.png AssetGenImage get background => const AssetGenImage('assets/images/components/background.png'); } diff --git a/packages/geometry/lib/src/geometry.dart b/packages/geometry/lib/src/geometry.dart index 6975f8cb..edc176e7 100644 --- a/packages/geometry/lib/src/geometry.dart +++ b/packages/geometry/lib/src/geometry.dart @@ -82,7 +82,7 @@ List calculateEllipse({ /// For more information read: https://en.wikipedia.org/wiki/B%C3%A9zier_curve List calculateBezierCurve({ required List controlPoints, - double step = 0.001, + double step = 0.01, }) { assert( 0 <= step && step <= 1, diff --git a/packages/geometry/test/src/geometry_test.dart b/packages/geometry/test/src/geometry_test.dart index 7a49b2b2..e702f043 100644 --- a/packages/geometry/test/src/geometry_test.dart +++ b/packages/geometry/test/src/geometry_test.dart @@ -98,14 +98,14 @@ void main() { ); }); - test('returns by default 1000 points as indicated by step', () { + test('returns by default 100 points as indicated by step', () { final points = calculateBezierCurve( controlPoints: [ Vector2(0, 0), Vector2(10, 10), ], ); - expect(points.length, 1000); + expect(points.length, 100); }); test('returns as many points as indicated by step', () { @@ -114,9 +114,9 @@ void main() { Vector2(0, 0), Vector2(10, 10), ], - step: 0.01, + step: 0.001, ); - expect(points.length, 100); + expect(points.length, 1000); }); }); diff --git a/packages/pinball_components/assets/images/dino/dino-land-bottom.png b/packages/pinball_components/assets/images/dino/dino-land-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1839dda3a852a83a3230ba24711fd0f043174320 GIT binary patch literal 11297 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
df&;(kjoJGDU!$~7>5tO_DAeHfsIxr>q~>o3rE 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 literal 0 HcmV?d00001 diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 27a54591..8bd651ed 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -14,7 +14,7 @@ class $AssetsImagesGen { AssetGenImage get ball => const AssetGenImage('assets/images/ball.png'); $AssetsImagesBaseboardGen get baseboard => const $AssetsImagesBaseboardGen(); - + $AssetsImagesDinoGen get dino => const $AssetsImagesDinoGen(); $AssetsImagesFlipperGen get flipper => const $AssetsImagesFlipperGen(); /// File path: assets/images/flutter_sign_post.png @@ -42,6 +42,18 @@ class $AssetsImagesBaseboardGen { const AssetGenImage('assets/images/baseboard/right.png'); } +class $AssetsImagesDinoGen { + const $AssetsImagesDinoGen(); + + /// File path: assets/images/dino/dino-land-bottom.png + AssetGenImage get dinoLandBottom => + const AssetGenImage('assets/images/dino/dino-land-bottom.png'); + + /// File path: assets/images/dino/dino-land-top.png + AssetGenImage get dinoLandTop => + const AssetGenImage('assets/images/dino/dino-land-top.png'); +} + class $AssetsImagesFlipperGen { const $AssetsImagesFlipperGen(); diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index a475f91e..4e38c2c4 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -2,6 +2,7 @@ export 'ball.dart'; export 'baseboard.dart'; export 'board_dimensions.dart'; export 'board_side.dart'; +export 'dino_walls.dart'; export 'fire_effect.dart'; export 'flipper.dart'; export 'flutter_sign_post.dart'; diff --git a/packages/pinball_components/lib/src/components/dino_walls.dart b/packages/pinball_components/lib/src/components/dino_walls.dart new file mode 100644 index 00000000..13f56ff3 --- /dev/null +++ b/packages/pinball_components/lib/src/components/dino_walls.dart @@ -0,0 +1,225 @@ +// ignore_for_file: comment_references, avoid_renaming_method_parameters + +import 'dart:async'; + +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/gen/assets.gen.dart'; +import 'package:pinball_components/pinball_components.dart' hide Assets; + +/// {@template dinowalls} +/// A [Blueprint] which creates walls for the [ChromeDino]. +/// {@endtemplate} +class DinoWalls extends Forge2DBlueprint { + /// {@macro dinowalls} + DinoWalls({required this.position}); + + /// The [position] where the elements will be created + final Vector2 position; + + @override + void build(_) { + addAll([ + _DinoTopWall()..initialPosition = position, + _DinoBottomWall()..initialPosition = position, + ]); + } +} + +/// {@template dino_top_wall} +/// Wall segment located above [ChromeDino]. +/// {@endtemplate} +class _DinoTopWall extends BodyComponent with InitialPosition { + ///{@macro dino_top_wall} + _DinoTopWall() : super(priority: 2); + + List _createFixtureDefs() { + final fixturesDef = []; + + final topStraightShape = EdgeShape() + ..set( + Vector2(29.5, 35.1), + Vector2(28.4, 35.1), + ); + final topStraightFixtureDef = FixtureDef(topStraightShape); + fixturesDef.add(topStraightFixtureDef); + + final topCurveShape = BezierCurveShape( + controlPoints: [ + topStraightShape.vertex1, + Vector2(17.4, 26.38), + Vector2(25.5, 20.7), + ], + ); + fixturesDef.add(FixtureDef(topCurveShape)); + + final middleCurveShape = BezierCurveShape( + controlPoints: [ + topCurveShape.vertices.last, + Vector2(27.8, 20.1), + Vector2(26.8, 19.5), + ], + ); + fixturesDef.add(FixtureDef(middleCurveShape)); + + final bottomCurveShape = BezierCurveShape( + controlPoints: [ + middleCurveShape.vertices.last, + Vector2(21.15, 16), + Vector2(25.6, 15.2), + ], + ); + fixturesDef.add(FixtureDef(bottomCurveShape)); + + final bottomStraightShape = EdgeShape() + ..set( + bottomCurveShape.vertices.last, + Vector2(31, 14.5), + ); + final bottomStraightFixtureDef = FixtureDef(bottomStraightShape); + fixturesDef.add(bottomStraightFixtureDef); + + return fixturesDef; + } + + @override + Body createBody() { + renderBody = false; + + final bodyDef = BodyDef() + ..userData = this + ..position = initialPosition + ..type = BodyType.static; + + final body = world.createBody(bodyDef); + _createFixtureDefs().forEach( + (fixture) => body.createFixture( + fixture + ..restitution = 0.1 + ..friction = 0, + ), + ); + + return body; + } + + @override + Future onLoad() async { + await super.onLoad(); + await _loadSprite(); + } + + Future _loadSprite() async { + final sprite = await gameRef.loadSprite( + Assets.images.dino.dinoLandTop.keyName, + ); + final spriteComponent = SpriteComponent( + sprite: sprite, + size: Vector2(10.6, 27.7), + anchor: Anchor.center, + position: Vector2(27, -28.2), + ); + + await add(spriteComponent); + } +} + +/// {@template dino_bottom_wall} +/// Wall segment located below [ChromeDino]. +/// {@endtemplate} +class _DinoBottomWall extends BodyComponent with InitialPosition { + ///{@macro dino_top_wall} + _DinoBottomWall() : super(priority: 2); + + List _createFixtureDefs() { + final fixturesDef = []; + + final topStraightControlPoints = [ + Vector2(32.4, 8.3), + Vector2(25, 7.7), + ]; + final topStraightShape = EdgeShape() + ..set( + topStraightControlPoints.first, + topStraightControlPoints.last, + ); + final topStraightFixtureDef = FixtureDef(topStraightShape); + fixturesDef.add(topStraightFixtureDef); + + final topLeftCurveControlPoints = [ + topStraightControlPoints.last, + Vector2(21.8, 7), + Vector2(29.5, -13.8), + ]; + final topLeftCurveShape = BezierCurveShape( + controlPoints: topLeftCurveControlPoints, + ); + fixturesDef.add(FixtureDef(topLeftCurveShape)); + + final bottomLeftStraightControlPoints = [ + topLeftCurveControlPoints.last, + Vector2(31.8, -44.1), + ]; + final bottomLeftStraightShape = EdgeShape() + ..set( + bottomLeftStraightControlPoints.first, + bottomLeftStraightControlPoints.last, + ); + final bottomLeftStraightFixtureDef = FixtureDef(bottomLeftStraightShape); + fixturesDef.add(bottomLeftStraightFixtureDef); + + final bottomStraightControlPoints = [ + bottomLeftStraightControlPoints.last, + Vector2(37.8, -44.1), + ]; + final bottomStraightShape = EdgeShape() + ..set( + bottomStraightControlPoints.first, + bottomStraightControlPoints.last, + ); + final bottomStraightFixtureDef = FixtureDef(bottomStraightShape); + fixturesDef.add(bottomStraightFixtureDef); + + return fixturesDef; + } + + @override + Body createBody() { + renderBody = false; + + final bodyDef = BodyDef() + ..userData = this + ..position = initialPosition + ..type = BodyType.static; + + final body = world.createBody(bodyDef); + _createFixtureDefs().forEach( + (fixture) => body.createFixture( + fixture + ..restitution = 0.1 + ..friction = 0, + ), + ); + + return body; + } + + @override + Future onLoad() async { + await super.onLoad(); + await _loadSprite(); + } + + Future _loadSprite() async { + final sprite = await gameRef.loadSprite( + Assets.images.dino.dinoLandBottom.keyName, + ); + final spriteComponent = SpriteComponent( + sprite: sprite, + size: Vector2(15.6, 54.8), + anchor: Anchor.center, + )..position = Vector2(31.7, 18); + + await add(spriteComponent); + } +} diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index c0eab284..d1f138d9 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -27,6 +27,7 @@ flutter: assets: - assets/images/ - assets/images/baseboard/ + - assets/images/dino/ - assets/images/flipper/ flutter_gen: diff --git a/packages/pinball_components/test/src/components/dino_walls_test.dart b/packages/pinball_components/test/src/components/dino_walls_test.dart new file mode 100644 index 00000000..af80444b --- /dev/null +++ b/packages/pinball_components/test/src/components/dino_walls_test.dart @@ -0,0 +1,28 @@ +// ignore_for_file: cascade_invocations + +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/pinball_components.dart'; + +import '../../helpers/helpers.dart'; + +void main() { + group('DinoWalls', () { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(TestGame.new); + + flameTester.test( + 'loads correctly', + (game) async { + final dinoWalls = DinoWalls(position: Vector2.zero()); + await game.addFromBlueprint(dinoWalls); + await game.ready(); + + for (final wall in dinoWalls.components) { + expect(game.contains(wall), isTrue); + } + }, + ); + }); +} diff --git a/packages/pinball_components/test/src/components/golden/dino-bottom-wall.png b/packages/pinball_components/test/src/components/golden/dino-bottom-wall.png new file mode 100644 index 0000000000000000000000000000000000000000..14ae9c0d3daf286a1d288bd2e8e69fec7055a2e5 GIT binary patch literal 39312 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 literal 0 HcmV?d00001 diff --git a/packages/pinball_components/test/src/components/golden/dino-top-wall.png b/packages/pinball_components/test/src/components/golden/dino-top-wall.png new file mode 100644 index 0000000000000000000000000000000000000000..0d434d694322b84c746757eb3d2adda91a5ad6e6 GIT binary patch literal 45600 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 literal 0 HcmV?d00001