From dd88114d1c1b19eb498b1c7da7805f4537502266 Mon Sep 17 00:00:00 2001 From: Alejandro Santiago Date: Wed, 30 Mar 2022 14:40:47 +0100 Subject: [PATCH] feat: included FlutterSignPost (#107) * feat: loaded flutter_sign_post.png * feat: added board priority * feat: included FlutterSignPost * feat: included tests * refactor: renamed tests names for consistency * chore: refactored exception * docs: fixed incorrect grammar Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> * docs: fixed typo * refactor: cleaned SpriteComponent logic Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> --- .gitignore | 3 ++ lib/game/components/board.dart | 3 +- lib/game/components/flutter_forest.dart | 3 ++ lib/game/game_assets.dart | 1 + .../assets/images/flutter_sign_post.png | Bin 0 -> 8431 bytes .../lib/gen/assets.gen.dart | 15 +++++++ .../lib/src/components/components.dart | 1 + .../lib/src/components/flutter_sign_post.dart | 41 ++++++++++++++++++ .../components/flutter_sign_post_test.dart | 25 +++++++++++ test/game/components/board_test.dart | 14 +++--- test/game/components/flutter_forest_test.dart | 16 +++++++ 11 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 packages/pinball_components/assets/images/flutter_sign_post.png create mode 100644 packages/pinball_components/lib/src/components/flutter_sign_post.dart create mode 100644 packages/pinball_components/test/src/components/flutter_sign_post_test.dart diff --git a/.gitignore b/.gitignore index 2d9c4dbe..a7531405 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,6 @@ app.*.map.json test/.test_runner.dart web/__/firebase/init.js + +# Application exceptions +!/packages/pinball_components/assets/images/flutter_sign_post.png diff --git a/lib/game/components/board.dart b/lib/game/components/board.dart index 84e6758d..fb6dcda3 100644 --- a/lib/game/components/board.dart +++ b/lib/game/components/board.dart @@ -7,7 +7,8 @@ import 'package:pinball_components/pinball_components.dart'; /// {endtemplate} class Board extends Component { /// {@macro board} - Board(); + // TODO(alestiago): Make Board a Blueprint and sort out priorities. + Board() : super(priority: 5); @override Future onLoad() async { diff --git a/lib/game/components/flutter_forest.dart b/lib/game/components/flutter_forest.dart index 19fba005..c5ed20bf 100644 --- a/lib/game/components/flutter_forest.dart +++ b/lib/game/components/flutter_forest.dart @@ -43,6 +43,8 @@ class FlutterForest extends Component Future onLoad() async { gameRef.addContactCallback(DashNestBumperBallContactCallback()); + final signPost = FlutterSignPost()..initialPosition = Vector2(8.35, 58.3); + // TODO(alestiago): adjust positioning once sprites are added. final smallLeftNest = SmallDashNestBumper(id: 'small_left_nest') ..initialPosition = Vector2(8.95, 51.95); @@ -52,6 +54,7 @@ class FlutterForest extends Component ..initialPosition = Vector2(18.55, 59.35); await addAll([ + signPost, smallLeftNest, smallRightNest, bigNest, diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index f597a066..73aae25f 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -8,6 +8,7 @@ extension PinballGameAssetsX on PinballGame { Future preLoadAssets() async { await Future.wait([ images.load(components.Assets.images.ball.keyName), + 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(Assets.images.components.background.path), diff --git a/packages/pinball_components/assets/images/flutter_sign_post.png b/packages/pinball_components/assets/images/flutter_sign_post.png new file mode 100644 index 0000000000000000000000000000000000000000..28a3facb7ff867f46335786856231045c4b3dd24 GIT binary patch literal 8431 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 ZoXaw2`GNiA!@Iyih`NflGFHhl{C^i1MT-Cc 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 bbf6a227..54b0ff53 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -3,15 +3,27 @@ /// FlutterGen /// ***************************************************** +// ignore_for_file: directives_ordering,unnecessary_import + import 'package:flutter/widgets.dart'; class $AssetsImagesGen { const $AssetsImagesGen(); + /// File path: assets/images/ball.png AssetGenImage get ball => const AssetGenImage('assets/images/ball.png'); + $AssetsImagesFlipperGen get flipper => const $AssetsImagesFlipperGen(); + + /// File path: assets/images/flutter_sign_post.png + AssetGenImage get flutterSignPost => + const AssetGenImage('assets/images/flutter_sign_post.png'); + + /// File path: assets/images/spaceship_bridge.png AssetGenImage get spaceshipBridge => const AssetGenImage('assets/images/spaceship_bridge.png'); + + /// File path: assets/images/spaceship_saucer.png AssetGenImage get spaceshipSaucer => const AssetGenImage('assets/images/spaceship_saucer.png'); } @@ -19,8 +31,11 @@ class $AssetsImagesGen { class $AssetsImagesFlipperGen { const $AssetsImagesFlipperGen(); + /// File path: assets/images/flipper/left.png AssetGenImage get left => const AssetGenImage('assets/images/flipper/left.png'); + + /// File path: assets/images/flipper/right.png AssetGenImage get right => const AssetGenImage('assets/images/flipper/right.png'); } diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index e6bc912c..c29f91a3 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 'board_side.dart'; export 'fire_effect.dart'; export 'flipper.dart'; +export 'flutter_sign_post.dart'; export 'initial_position.dart'; export 'joint_anchor.dart'; export 'layer.dart'; diff --git a/packages/pinball_components/lib/src/components/flutter_sign_post.dart b/packages/pinball_components/lib/src/components/flutter_sign_post.dart new file mode 100644 index 00000000..deaceb76 --- /dev/null +++ b/packages/pinball_components/lib/src/components/flutter_sign_post.dart @@ -0,0 +1,41 @@ +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flutter/material.dart'; +import 'package:pinball_components/pinball_components.dart'; + +/// {@template flutter_sign_post} +/// A sign, found in the FlutterForest. +/// {@endtemplate} +// TODO(alestiago): Revisit doc comment if FlutterForest is moved to package. +class FlutterSignPost extends BodyComponent with InitialPosition { + Future _loadSprite() async { + final sprite = await gameRef.loadSprite( + Assets.images.flutterSignPost.keyName, + ); + final spriteComponent = SpriteComponent( + sprite: sprite, + size: sprite.originalSize / 10, + anchor: Anchor.bottomCenter, + position: Vector2(0.65, 0.45), + ); + await add(spriteComponent); + } + + @override + Future onLoad() async { + await super.onLoad(); + paint = Paint() + ..color = Colors.blue.withOpacity(0.5) + ..style = PaintingStyle.fill; + await _loadSprite(); + } + + @override + Body createBody() { + final shape = CircleShape()..radius = 0.25; + final fixtureDef = FixtureDef(shape); + final bodyDef = BodyDef()..position = initialPosition; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } +} diff --git a/packages/pinball_components/test/src/components/flutter_sign_post_test.dart b/packages/pinball_components/test/src/components/flutter_sign_post_test.dart new file mode 100644 index 00000000..98815af7 --- /dev/null +++ b/packages/pinball_components/test/src/components/flutter_sign_post_test.dart @@ -0,0 +1,25 @@ +// ignore_for_file: cascade_invocations + +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() { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(TestGame.new); + + group('FlutterSignPost', () { + flameTester.test( + 'loads correctly', + (game) async { + final flutterSignPost = FlutterSignPost(); + await game.ready(); + await game.ensureAdd(flutterSignPost); + + expect(game.contains(flutterSignPost), isTrue); + }, + ); + }); +} diff --git a/test/game/components/board_test.dart b/test/game/components/board_test.dart index 7b74d0da..2f51b2b1 100644 --- a/test/game/components/board_test.dart +++ b/test/game/components/board_test.dart @@ -23,9 +23,9 @@ void main() { }, ); - group('children', () { + group('loads', () { flameTester.test( - 'has one left flipper', + 'one left flipper', (game) async { final board = Board(); await game.ready(); @@ -39,7 +39,7 @@ void main() { ); flameTester.test( - 'has one right flipper', + 'one right flipper', (game) async { final board = Board(); await game.ready(); @@ -52,7 +52,7 @@ void main() { ); flameTester.test( - 'has two Baseboards', + 'two Baseboards', (game) async { final board = Board(); await game.ready(); @@ -64,7 +64,7 @@ void main() { ); flameTester.test( - 'has two Kickers', + 'two Kickers', (game) async { final board = Board(); await game.ready(); @@ -76,7 +76,7 @@ void main() { ); flameTester.test( - 'has one FlutterForest', + 'one FlutterForest', (game) async { // TODO(alestiago): change to [NestBumpers] once provided. final board = Board(); @@ -89,7 +89,7 @@ void main() { ); flameTester.test( - 'has one ChromeDino', + 'one ChromeDino', (game) async { final board = Board(); await game.ready(); diff --git a/test/game/components/flutter_forest_test.dart b/test/game/components/flutter_forest_test.dart index 0dd9212d..659a4f13 100644 --- a/test/game/components/flutter_forest_test.dart +++ b/test/game/components/flutter_forest_test.dart @@ -25,6 +25,22 @@ void main() { }, ); + group('loads', () { + flameTester.test( + 'a FlutterSignPost', + (game) async { + await game.ready(); + final flutterForest = FlutterForest(); + await game.ensureAdd(flutterForest); + + expect( + game.descendants().whereType().length, + equals(1), + ); + }, + ); + }); + flameTester.test( 'onNewState adds a new ball', (game) async {