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 <dev@alestiago.com>

* refactor: sandbox ball color

* fix: cow bumper spriteposition

* fix: cow bumper size

* refactor: cow shape and positioning

Co-authored-by: Alejandro Santiago <dev@alestiago.com>
Co-authored-by: Allison Ryan <allisonryan0002@gmail.com>
Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com>
pull/269/head
Rui Miguel Alonso 2 years ago committed by GitHub
parent fc039ec082
commit 7d8cd8c357
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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(),

@ -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),

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@ -38,6 +38,8 @@ class $AssetsImagesAndroidBumperGen {
const $AssetsImagesAndroidBumperAGen();
$AssetsImagesAndroidBumperBGen get b =>
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();

@ -19,6 +19,7 @@ class AndroidBumper extends BodyComponent with InitialPosition {
required double minorRadius,
required String litAssetPath,
required String dimmedAssetPath,
required Vector2 spritePosition,
Iterable<Component>? 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<Component>? 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,
);

@ -5,7 +5,7 @@ import 'package:bloc/bloc.dart';
part 'android_bumper_state.dart';
class AndroidBumperCubit extends Cubit<AndroidBumperState> {
AndroidBumperCubit() : super(AndroidBumperState.dimmed);
AndroidBumperCubit() : super(AndroidBumperState.lit);
void onBallContacted() {
emit(AndroidBumperState.dimmed);

@ -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/

@ -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<void> onLoad() async {
await super.onLoad();
camera.followVector2(Vector2.zero());
await add(
AndroidBumper.cow()..priority = 1,
);
await traceAllBodies();
}
}

@ -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,

@ -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

@ -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<AndroidBumper>().length,
equals(2),
equals(3),
);
},
);

@ -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,

Loading…
Cancel
Save