From 7d8cd8c3578887b4010a487dec8b999dc647c8b6 Mon Sep 17 00:00:00 2001 From: Rui Miguel Alonso Date: Sat, 30 Apr 2022 16:34:09 +0200 Subject: [PATCH] feat: implemented `AndroidBumper.cow` (#257) * feat: added cow assets * feat: added cow bumper * feat: cow sanbox * Update packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart Co-authored-by: Alejandro Santiago * refactor: sandbox ball color * fix: cow bumper spriteposition * fix: cow bumper size * refactor: cow shape and positioning Co-authored-by: Alejandro Santiago Co-authored-by: Allison Ryan Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> --- lib/game/components/android_acres.dart | 9 +++-- lib/game/game_assets.dart | 2 ++ .../images/android_bumper/cow/dimmed.png | Bin 0 -> 10556 bytes .../assets/images/android_bumper/cow/lit.png | Bin 0 -> 10516 bytes .../lib/gen/assets.gen.dart | 14 ++++++++ .../android_bumper/android_bumper.dart | 20 ++++++++++- .../cubit/android_bumper_cubit.dart | 2 +- packages/pinball_components/pubspec.yaml | 1 + .../android_bumper_cow_game.dart | 33 ++++++++++++++++++ .../lib/stories/android_acres/stories.dart | 6 ++++ .../android_bumper/android_bumper_test.dart | 8 +++++ test/game/components/android_acres_test.dart | 6 ++-- test/game/pinball_game_test.dart | 2 ++ 13 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 packages/pinball_components/assets/images/android_bumper/cow/dimmed.png create mode 100644 packages/pinball_components/assets/images/android_bumper/cow/lit.png create mode 100644 packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart diff --git a/lib/game/components/android_acres.dart b/lib/game/components/android_acres.dart index 4a235619..8b5fe718 100644 --- a/lib/game/components/android_acres.dart +++ b/lib/game/components/android_acres.dart @@ -18,12 +18,17 @@ class AndroidAcres extends Blueprint { children: [ ScoringBehavior(points: 20000), ], - )..initialPosition = Vector2(-32.52, -9.1), + )..initialPosition = Vector2(-25, 1.3), AndroidBumper.b( children: [ ScoringBehavior(points: 20000), ], - )..initialPosition = Vector2(-22.89, -17.35), + )..initialPosition = Vector2(-32.6, -9.2), + AndroidBumper.cow( + children: [ + ScoringBehavior(points: 20), + ], + )..initialPosition = Vector2(-20.5, -13.8), ], blueprints: [ SpaceshipRamp(), diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index ab4e9860..cb62d929 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -83,6 +83,8 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.androidBumper.a.dimmed.keyName), images.load(components.Assets.images.androidBumper.b.lit.keyName), images.load(components.Assets.images.androidBumper.b.dimmed.keyName), + images.load(components.Assets.images.androidBumper.cow.lit.keyName), + images.load(components.Assets.images.androidBumper.cow.dimmed.keyName), images.load(components.Assets.images.sparky.computer.top.keyName), images.load(components.Assets.images.sparky.computer.base.keyName), images.load(components.Assets.images.sparky.animatronic.keyName), diff --git a/packages/pinball_components/assets/images/android_bumper/cow/dimmed.png b/packages/pinball_components/assets/images/android_bumper/cow/dimmed.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8bb146c6ad476e862642cdb7ab3b1462595e43 GIT binary patch literal 10556 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 z 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 KMNUMnLSTY3P}sKs literal 0 HcmV?d00001 diff --git a/packages/pinball_components/assets/images/android_bumper/cow/lit.png b/packages/pinball_components/assets/images/android_bumper/cow/lit.png new file mode 100644 index 0000000000000000000000000000000000000000..4909708b68f6fe8e5902451c66d5c9e8ba425020 GIT binary patch literal 10516 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 W=)Xy{YK{*80000 const $AssetsImagesAndroidBumperBGen(); + $AssetsImagesAndroidBumperCowGen get cow => + const $AssetsImagesAndroidBumperCowGen(); } class $AssetsImagesBackboardGen { @@ -286,6 +288,18 @@ class $AssetsImagesAndroidBumperBGen { const AssetGenImage('assets/images/android_bumper/b/lit.png'); } +class $AssetsImagesAndroidBumperCowGen { + const $AssetsImagesAndroidBumperCowGen(); + + /// File path: assets/images/android_bumper/cow/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/android_bumper/cow/dimmed.png'); + + /// File path: assets/images/android_bumper/cow/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/android_bumper/cow/lit.png'); +} + class $AssetsImagesDashBumperGen { const $AssetsImagesDashBumperGen(); diff --git a/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart b/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart index ad954975..4cefc28d 100644 --- a/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart +++ b/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart @@ -19,6 +19,7 @@ class AndroidBumper extends BodyComponent with InitialPosition { required double minorRadius, required String litAssetPath, required String dimmedAssetPath, + required Vector2 spritePosition, Iterable? children, required this.bloc, }) : _majorRadius = majorRadius, @@ -32,6 +33,7 @@ class AndroidBumper extends BodyComponent with InitialPosition { _AndroidBumperSpriteGroupComponent( dimmedAssetPath: dimmedAssetPath, litAssetPath: litAssetPath, + position: spritePosition, state: bloc.state, ), ...?children, @@ -46,6 +48,7 @@ class AndroidBumper extends BodyComponent with InitialPosition { minorRadius: 2.97, litAssetPath: Assets.images.androidBumper.a.lit.keyName, dimmedAssetPath: Assets.images.androidBumper.a.dimmed.keyName, + spritePosition: Vector2(0, -0.1), bloc: AndroidBumperCubit(), children: children, ); @@ -58,6 +61,20 @@ class AndroidBumper extends BodyComponent with InitialPosition { minorRadius: 2.79, litAssetPath: Assets.images.androidBumper.b.lit.keyName, dimmedAssetPath: Assets.images.androidBumper.b.dimmed.keyName, + spritePosition: Vector2(0, -0.1), + bloc: AndroidBumperCubit(), + children: children, + ); + + /// {@macro android_bumper} + AndroidBumper.cow({ + Iterable? children, + }) : this._( + majorRadius: 3.4, + minorRadius: 2.9, + litAssetPath: Assets.images.androidBumper.cow.lit.keyName, + dimmedAssetPath: Assets.images.androidBumper.cow.dimmed.keyName, + spritePosition: Vector2(0, -0.68), bloc: AndroidBumperCubit(), children: children, ); @@ -113,12 +130,13 @@ class _AndroidBumperSpriteGroupComponent _AndroidBumperSpriteGroupComponent({ required String litAssetPath, required String dimmedAssetPath, + required Vector2 position, required AndroidBumperState state, }) : _litAssetPath = litAssetPath, _dimmedAssetPath = dimmedAssetPath, super( anchor: Anchor.center, - position: Vector2(0, -0.1), + position: position, current: state, ); diff --git a/packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_cubit.dart b/packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_cubit.dart index 3d3fd4b1..3e75f890 100644 --- a/packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_cubit.dart +++ b/packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_cubit.dart @@ -5,7 +5,7 @@ import 'package:bloc/bloc.dart'; part 'android_bumper_state.dart'; class AndroidBumperCubit extends Cubit { - AndroidBumperCubit() : super(AndroidBumperState.dimmed); + AndroidBumperCubit() : super(AndroidBumperState.lit); void onBallContacted() { emit(AndroidBumperState.dimmed); diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index c260b626..76607e13 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -66,6 +66,7 @@ flutter: - assets/images/slingshot/ - assets/images/android_bumper/a/ - assets/images/android_bumper/b/ + - assets/images/android_bumper/cow/ - assets/images/sparky/ - assets/images/sparky/computer/ - assets/images/sparky/bumper/a/ diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart new file mode 100644 index 00000000..3b0aa828 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart @@ -0,0 +1,33 @@ +import 'dart:async'; + +import 'package:flame/extensions.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; + +class AndroidBumperCowGame extends BallGame { + AndroidBumperCowGame() + : super( + imagesFileNames: [ + Assets.images.androidBumper.cow.lit.keyName, + Assets.images.androidBumper.cow.dimmed.keyName, + ], + ); + + static const description = ''' + Shows how a AndroidBumper.cow is rendered. + + - Activate the "trace" parameter to overlay the body. +'''; + + @override + Future onLoad() async { + await super.onLoad(); + + camera.followVector2(Vector2.zero()); + await add( + AndroidBumper.cow()..priority = 1, + ); + + await traceAllBodies(); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/stories.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/stories.dart index 92ddd5d5..d8f84671 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/stories.dart @@ -2,6 +2,7 @@ import 'package:dashbook/dashbook.dart'; import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/android_acres/android_bumper_a_game.dart'; import 'package:sandbox/stories/android_acres/android_bumper_b_game.dart'; +import 'package:sandbox/stories/android_acres/android_bumper_cow_game.dart'; import 'package:sandbox/stories/android_acres/spaceship_game.dart'; import 'package:sandbox/stories/android_acres/spaceship_rail_game.dart'; import 'package:sandbox/stories/android_acres/spaceship_ramp_game.dart'; @@ -18,6 +19,11 @@ void addAndroidAcresStories(Dashbook dashbook) { description: AndroidBumperBGame.description, gameBuilder: (_) => AndroidBumperBGame(), ) + ..addGame( + title: 'Android Bumper Cow', + description: AndroidBumperCowGame.description, + gameBuilder: (_) => AndroidBumperCowGame(), + ) ..addGame( title: 'Spaceship', description: SpaceshipGame.description, diff --git a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart index abc51a28..831330c0 100644 --- a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart @@ -17,6 +17,8 @@ void main() { Assets.images.androidBumper.a.dimmed.keyName, Assets.images.androidBumper.b.lit.keyName, Assets.images.androidBumper.b.dimmed.keyName, + Assets.images.androidBumper.cow.lit.keyName, + Assets.images.androidBumper.cow.dimmed.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); @@ -33,6 +35,12 @@ void main() { expect(game.contains(androidBumper), isTrue); }); + flameTester.test('"cow" loads correctly', (game) async { + final androidBumper = AndroidBumper.cow(); + await game.ensureAdd(androidBumper); + expect(game.contains(androidBumper), isTrue); + }); + // TODO(alestiago): Consider refactoring once the following is merged: // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs diff --git a/test/game/components/android_acres_test.dart b/test/game/components/android_acres_test.dart index 419524c6..01ab5d7b 100644 --- a/test/game/components/android_acres_test.dart +++ b/test/game/components/android_acres_test.dart @@ -27,6 +27,8 @@ void main() { Assets.images.androidBumper.a.dimmed.keyName, Assets.images.androidBumper.b.lit.keyName, Assets.images.androidBumper.b.dimmed.keyName, + Assets.images.androidBumper.cow.lit.keyName, + Assets.images.androidBumper.cow.dimmed.keyName, ]; final flameTester = FlameTester( () => EmptyPinballTestGame(assets: assets), @@ -73,7 +75,7 @@ void main() { ); flameTester.test( - 'two AndroidBumper', + 'three AndroidBumper', (game) async { final androidZone = AndroidAcres(); await game.addFromBlueprint(androidZone); @@ -81,7 +83,7 @@ void main() { expect( game.descendants().whereType().length, - equals(2), + equals(3), ); }, ); diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index ef831b5c..d614f709 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -18,6 +18,8 @@ void main() { Assets.images.androidBumper.a.dimmed.keyName, Assets.images.androidBumper.b.lit.keyName, Assets.images.androidBumper.b.dimmed.keyName, + Assets.images.androidBumper.cow.lit.keyName, + Assets.images.androidBumper.cow.dimmed.keyName, Assets.images.backboard.backboardScores.keyName, Assets.images.backboard.backboardGameOver.keyName, Assets.images.backboard.display.keyName,