refactor: `SparkyScorch` and asset renaming (#268)

* refactor: sparky scorch

* test: update golden

* chore: update preLoad method

* chore: remove constructor
pull/278/head
Allison Ryan 3 years ago committed by GitHub
parent e5e770d086
commit 3bb5f42f58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,4 +12,4 @@ export 'google_word/google_word.dart';
export 'launcher.dart'; export 'launcher.dart';
export 'multipliers/multipliers.dart'; export 'multipliers/multipliers.dart';
export 'scoring_behavior.dart'; export 'scoring_behavior.dart';
export 'sparky_fire_zone.dart'; export 'sparky_scorch.dart';

@ -5,15 +5,13 @@ import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
/// {@template sparky_fire_zone} /// {@template sparky_scorch}
/// Area positioned at the top left of the board where the [Ball] /// Area positioned at the top left of the board containing the
/// can bounce off [SparkyBumper]s. /// [SparkyComputer], [SparkyAnimatronic], and [SparkyBumper]s.
///
/// When a [Ball] hits [SparkyBumper]s, the bumper animates.
/// {@endtemplate} /// {@endtemplate}
class SparkyFireZone extends Blueprint { class SparkyScorch extends Blueprint {
/// {@macro sparky_fire_zone} /// {@macro sparky_scorch}
SparkyFireZone() SparkyScorch()
: super( : super(
components: [ components: [
SparkyBumper.a( SparkyBumper.a(

@ -89,13 +89,14 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.android.bumper.cow.dimmed.keyName), images.load(components.Assets.images.android.bumper.cow.dimmed.keyName),
images.load(components.Assets.images.sparky.computer.top.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.computer.base.keyName),
images.load(components.Assets.images.sparky.computer.glow.keyName),
images.load(components.Assets.images.sparky.animatronic.keyName), images.load(components.Assets.images.sparky.animatronic.keyName),
images.load(components.Assets.images.sparky.bumper.a.inactive.keyName), images.load(components.Assets.images.sparky.bumper.a.lit.keyName),
images.load(components.Assets.images.sparky.bumper.a.active.keyName), images.load(components.Assets.images.sparky.bumper.a.dimmed.keyName),
images.load(components.Assets.images.sparky.bumper.b.active.keyName), images.load(components.Assets.images.sparky.bumper.b.lit.keyName),
images.load(components.Assets.images.sparky.bumper.b.inactive.keyName), images.load(components.Assets.images.sparky.bumper.b.dimmed.keyName),
images.load(components.Assets.images.sparky.bumper.c.active.keyName), images.load(components.Assets.images.sparky.bumper.c.lit.keyName),
images.load(components.Assets.images.sparky.bumper.c.inactive.keyName), images.load(components.Assets.images.sparky.bumper.c.dimmed.keyName),
images.load(components.Assets.images.backboard.backboardScores.keyName), images.load(components.Assets.images.backboard.backboardScores.keyName),
images.load(components.Assets.images.backboard.backboardGameOver.keyName), images.load(components.Assets.images.backboard.backboardGameOver.keyName),
images.load(components.Assets.images.googleWord.letter1.keyName), images.load(components.Assets.images.googleWord.letter1.keyName),

@ -54,7 +54,7 @@ class PinballGame extends Forge2DGame
unawaited(addFromBlueprint(launcher)); unawaited(addFromBlueprint(launcher));
await add(Multipliers()); await add(Multipliers());
await add(FlutterForest()); await add(FlutterForest());
await addFromBlueprint(SparkyFireZone()); await addFromBlueprint(SparkyScorch());
await addFromBlueprint(AndroidAcres()); await addFromBlueprint(AndroidAcres());
await addFromBlueprint(DinoDesert()); await addFromBlueprint(DinoDesert());
unawaited(addFromBlueprint(Slingshots())); unawaited(addFromBlueprint(Slingshots()));

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

@ -419,6 +419,10 @@ class $AssetsImagesSparkyComputerGen {
AssetGenImage get base => AssetGenImage get base =>
const AssetGenImage('assets/images/sparky/computer/base.png'); const AssetGenImage('assets/images/sparky/computer/base.png');
/// File path: assets/images/sparky/computer/glow.png
AssetGenImage get glow =>
const AssetGenImage('assets/images/sparky/computer/glow.png');
/// File path: assets/images/sparky/computer/top.png /// File path: assets/images/sparky/computer/top.png
AssetGenImage get top => AssetGenImage get top =>
const AssetGenImage('assets/images/sparky/computer/top.png'); const AssetGenImage('assets/images/sparky/computer/top.png');
@ -527,37 +531,37 @@ class $AssetsImagesDashBumperMainGen {
class $AssetsImagesSparkyBumperAGen { class $AssetsImagesSparkyBumperAGen {
const $AssetsImagesSparkyBumperAGen(); const $AssetsImagesSparkyBumperAGen();
/// File path: assets/images/sparky/bumper/a/active.png /// File path: assets/images/sparky/bumper/a/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/sparky/bumper/a/active.png'); const AssetGenImage('assets/images/sparky/bumper/a/dimmed.png');
/// File path: assets/images/sparky/bumper/a/inactive.png /// File path: assets/images/sparky/bumper/a/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/sparky/bumper/a/inactive.png'); const AssetGenImage('assets/images/sparky/bumper/a/lit.png');
} }
class $AssetsImagesSparkyBumperBGen { class $AssetsImagesSparkyBumperBGen {
const $AssetsImagesSparkyBumperBGen(); const $AssetsImagesSparkyBumperBGen();
/// File path: assets/images/sparky/bumper/b/active.png /// File path: assets/images/sparky/bumper/b/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/sparky/bumper/b/active.png'); const AssetGenImage('assets/images/sparky/bumper/b/dimmed.png');
/// File path: assets/images/sparky/bumper/b/inactive.png /// File path: assets/images/sparky/bumper/b/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/sparky/bumper/b/inactive.png'); const AssetGenImage('assets/images/sparky/bumper/b/lit.png');
} }
class $AssetsImagesSparkyBumperCGen { class $AssetsImagesSparkyBumperCGen {
const $AssetsImagesSparkyBumperCGen(); const $AssetsImagesSparkyBumperCGen();
/// File path: assets/images/sparky/bumper/c/active.png /// File path: assets/images/sparky/bumper/c/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/sparky/bumper/c/active.png'); const AssetGenImage('assets/images/sparky/bumper/c/dimmed.png');
/// File path: assets/images/sparky/bumper/c/inactive.png /// File path: assets/images/sparky/bumper/c/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/sparky/bumper/c/inactive.png'); const AssetGenImage('assets/images/sparky/bumper/c/lit.png');
} }
class Assets { class Assets {

@ -57,7 +57,7 @@ abstract class RenderPriority {
static const int rocket = _below + bottomBoundary; static const int rocket = _below + bottomBoundary;
// Dino Land // Dino Desert
static const int dinoTopWall = _above + ballOnBoard; static const int dinoTopWall = _above + ballOnBoard;
@ -71,12 +71,14 @@ abstract class RenderPriority {
static const int flutterForest = _above + launchRampForegroundRailing; static const int flutterForest = _above + launchRampForegroundRailing;
// Sparky Fire Zone // Sparky Scorch
static const int computerBase = _below + ballOnBoard; static const int computerBase = _below + ballOnBoard;
static const int computerTop = _above + ballOnBoard; static const int computerTop = _above + ballOnBoard;
static const int computerGlow = _above + ballOnBoard;
static const int sparkyAnimatronic = _above + spaceshipRampForegroundRailing; static const int sparkyAnimatronic = _above + spaceshipRampForegroundRailing;
static const int sparkyBumper = _above + ballOnBoard; static const int sparkyBumper = _above + ballOnBoard;

@ -3,19 +3,19 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
/// {@template sparky_bumper_blinking_behavior} /// {@template sparky_bumper_blinking_behavior}
/// Makes a [SparkyBumper] blink back to [SparkyBumperState.active] when /// Makes a [SparkyBumper] blink back to [SparkyBumperState.lit] when
/// [SparkyBumperState.inactive]. /// [SparkyBumperState.dimmed].
/// {@endtemplate} /// {@endtemplate}
class SparkyBumperBlinkingBehavior extends TimerComponent class SparkyBumperBlinkingBehavior extends TimerComponent
with ParentIsA<SparkyBumper> { with ParentIsA<SparkyBumper> {
/// {@macro sparky_bumper_sprite_behavior} /// {@macro sparky_bumper_blinking_behavior}
SparkyBumperBlinkingBehavior() : super(period: 0.05); SparkyBumperBlinkingBehavior() : super(period: 0.05);
void _onNewState(SparkyBumperState state) { void _onNewState(SparkyBumperState state) {
switch (state) { switch (state) {
case SparkyBumperState.active: case SparkyBumperState.lit:
break; break;
case SparkyBumperState.inactive: case SparkyBumperState.dimmed:
timer timer
..reset() ..reset()
..start(); ..start();

@ -5,13 +5,13 @@ import 'package:bloc/bloc.dart';
part 'sparky_bumper_state.dart'; part 'sparky_bumper_state.dart';
class SparkyBumperCubit extends Cubit<SparkyBumperState> { class SparkyBumperCubit extends Cubit<SparkyBumperState> {
SparkyBumperCubit() : super(SparkyBumperState.active); SparkyBumperCubit() : super(SparkyBumperState.lit);
void onBallContacted() { void onBallContacted() {
emit(SparkyBumperState.inactive); emit(SparkyBumperState.dimmed);
} }
void onBlinked() { void onBlinked() {
emit(SparkyBumperState.active); emit(SparkyBumperState.lit);
} }
} }

@ -1,10 +1,8 @@
// ignore_for_file: public_member_api_docs
part of 'sparky_bumper_cubit.dart'; part of 'sparky_bumper_cubit.dart';
/// Indicates the [SparkyBumperCubit]'s current state.
enum SparkyBumperState { enum SparkyBumperState {
/// A lit up bumper. lit,
active, dimmed,
/// A dimmed bumper.
inactive,
} }

@ -17,8 +17,8 @@ class SparkyBumper extends BodyComponent with InitialPosition {
SparkyBumper._({ SparkyBumper._({
required double majorRadius, required double majorRadius,
required double minorRadius, required double minorRadius,
required String onAssetPath, required String litAssetPath,
required String offAssetPath, required String dimmedAssetPath,
required Vector2 spritePosition, required Vector2 spritePosition,
required this.bloc, required this.bloc,
Iterable<Component>? children, Iterable<Component>? children,
@ -31,8 +31,8 @@ class SparkyBumper extends BodyComponent with InitialPosition {
SparkyBumperBallContactBehavior(), SparkyBumperBallContactBehavior(),
SparkyBumperBlinkingBehavior(), SparkyBumperBlinkingBehavior(),
_SparkyBumperSpriteGroupComponent( _SparkyBumperSpriteGroupComponent(
onAssetPath: onAssetPath, litAssetPath: litAssetPath,
offAssetPath: offAssetPath, dimmedAssetPath: dimmedAssetPath,
position: spritePosition, position: spritePosition,
state: bloc.state, state: bloc.state,
), ),
@ -46,8 +46,8 @@ class SparkyBumper extends BodyComponent with InitialPosition {
}) : this._( }) : this._(
majorRadius: 2.9, majorRadius: 2.9,
minorRadius: 2.1, minorRadius: 2.1,
onAssetPath: Assets.images.sparky.bumper.a.active.keyName, litAssetPath: Assets.images.sparky.bumper.a.lit.keyName,
offAssetPath: Assets.images.sparky.bumper.a.inactive.keyName, dimmedAssetPath: Assets.images.sparky.bumper.a.dimmed.keyName,
spritePosition: Vector2(0, -0.25), spritePosition: Vector2(0, -0.25),
bloc: SparkyBumperCubit(), bloc: SparkyBumperCubit(),
children: children, children: children,
@ -59,8 +59,8 @@ class SparkyBumper extends BodyComponent with InitialPosition {
}) : this._( }) : this._(
majorRadius: 2.85, majorRadius: 2.85,
minorRadius: 2, minorRadius: 2,
onAssetPath: Assets.images.sparky.bumper.b.active.keyName, litAssetPath: Assets.images.sparky.bumper.b.lit.keyName,
offAssetPath: Assets.images.sparky.bumper.b.inactive.keyName, dimmedAssetPath: Assets.images.sparky.bumper.b.dimmed.keyName,
spritePosition: Vector2(0, -0.35), spritePosition: Vector2(0, -0.35),
bloc: SparkyBumperCubit(), bloc: SparkyBumperCubit(),
children: children, children: children,
@ -72,8 +72,8 @@ class SparkyBumper extends BodyComponent with InitialPosition {
}) : this._( }) : this._(
majorRadius: 3, majorRadius: 3,
minorRadius: 2.2, minorRadius: 2.2,
onAssetPath: Assets.images.sparky.bumper.c.active.keyName, litAssetPath: Assets.images.sparky.bumper.c.lit.keyName,
offAssetPath: Assets.images.sparky.bumper.c.inactive.keyName, dimmedAssetPath: Assets.images.sparky.bumper.c.dimmed.keyName,
spritePosition: Vector2(0, -0.4), spritePosition: Vector2(0, -0.4),
bloc: SparkyBumperCubit(), bloc: SparkyBumperCubit(),
children: children, children: children,
@ -127,20 +127,20 @@ class _SparkyBumperSpriteGroupComponent
extends SpriteGroupComponent<SparkyBumperState> extends SpriteGroupComponent<SparkyBumperState>
with HasGameRef, ParentIsA<SparkyBumper> { with HasGameRef, ParentIsA<SparkyBumper> {
_SparkyBumperSpriteGroupComponent({ _SparkyBumperSpriteGroupComponent({
required String onAssetPath, required String litAssetPath,
required String offAssetPath, required String dimmedAssetPath,
required Vector2 position, required Vector2 position,
required SparkyBumperState state, required SparkyBumperState state,
}) : _onAssetPath = onAssetPath, }) : _litAssetPath = litAssetPath,
_offAssetPath = offAssetPath, _dimmedAssetPath = dimmedAssetPath,
super( super(
anchor: Anchor.center, anchor: Anchor.center,
position: position, position: position,
current: state, current: state,
); );
final String _onAssetPath; final String _litAssetPath;
final String _offAssetPath; final String _dimmedAssetPath;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
@ -151,11 +151,11 @@ class _SparkyBumperSpriteGroupComponent
parent.bloc.stream.listen((state) => current = state); parent.bloc.stream.listen((state) => current = state);
final sprites = { final sprites = {
SparkyBumperState.active: Sprite( SparkyBumperState.lit: Sprite(
gameRef.images.fromCache(_onAssetPath), gameRef.images.fromCache(_litAssetPath),
), ),
SparkyBumperState.inactive: Sprite( SparkyBumperState.dimmed: Sprite(
gameRef.images.fromCache(_offAssetPath), gameRef.images.fromCache(_dimmedAssetPath),
), ),
}; };
this.sprites = sprites; this.sprites = sprites;

@ -15,6 +15,7 @@ class SparkyComputer extends Blueprint {
components: [ components: [
_ComputerBase(), _ComputerBase(),
_ComputerTopSpriteComponent(), _ComputerTopSpriteComponent(),
_ComputerGlowSpriteComponent(),
], ],
); );
} }
@ -65,15 +66,17 @@ class _ComputerBaseSpriteComponent extends SpriteComponent with HasGameRef {
_ComputerBaseSpriteComponent() _ComputerBaseSpriteComponent()
: super( : super(
anchor: Anchor.center, anchor: Anchor.center,
position: Vector2(-11.95, -48.35), position: Vector2(-12.1, -48.15),
); );
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = Sprite(
gameRef.images.fromCache(
Assets.images.sparky.computer.base.keyName, Assets.images.sparky.computer.base.keyName,
),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 10;
@ -84,7 +87,7 @@ class _ComputerTopSpriteComponent extends SpriteComponent with HasGameRef {
_ComputerTopSpriteComponent() _ComputerTopSpriteComponent()
: super( : super(
anchor: Anchor.center, anchor: Anchor.center,
position: Vector2(-12.45, -49.75), position: Vector2(-12.52, -49.37),
priority: RenderPriority.computerTop, priority: RenderPriority.computerTop,
); );
@ -92,8 +95,32 @@ class _ComputerTopSpriteComponent extends SpriteComponent with HasGameRef {
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = Sprite(
gameRef.images.fromCache(
Assets.images.sparky.computer.top.keyName, Assets.images.sparky.computer.top.keyName,
),
);
this.sprite = sprite;
size = sprite.originalSize / 10;
}
}
class _ComputerGlowSpriteComponent extends SpriteComponent with HasGameRef {
_ComputerGlowSpriteComponent()
: super(
anchor: Anchor.center,
position: Vector2(7.4, 10),
priority: RenderPriority.computerGlow,
);
@override
Future<void> onLoad() async {
await super.onLoad();
final sprite = Sprite(
gameRef.images.fromCache(
Assets.images.sparky.computer.glow.keyName,
),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 10;

@ -19,7 +19,7 @@ void main() {
addBottomGroupStories(dashbook); addBottomGroupStories(dashbook);
addPlungerStories(dashbook); addPlungerStories(dashbook);
addSlingshotStories(dashbook); addSlingshotStories(dashbook);
addSparkyBumperStories(dashbook); addSparkyScorchStories(dashbook);
addAndroidAcresStories(dashbook); addAndroidAcresStories(dashbook);
addBoundariesStories(dashbook); addBoundariesStories(dashbook);
addGoogleWordStories(dashbook); addGoogleWordStories(dashbook);

@ -15,7 +15,7 @@ class LaunchRampGame extends BallGame {
); );
static const description = ''' static const description = '''
Shows how LaunchRamp are rendered. Shows how the LaunchRamp is rendered.
- Activate the "trace" parameter to overlay the body. - Activate the "trace" parameter to overlay the body.
- Tap anywhere on the screen to spawn a ball into the game. - Tap anywhere on the screen to spawn a ball into the game.
@ -26,7 +26,7 @@ class LaunchRampGame extends BallGame {
await super.onLoad(); await super.onLoad();
camera camera
..followVector2(Vector2(0, 0)) ..followVector2(Vector2.zero())
..zoom = 7.5; ..zoom = 7.5;
await addFromBlueprint(LaunchRamp()); await addFromBlueprint(LaunchRamp());
await ready(); await ready();

@ -1,11 +0,0 @@
import 'package:dashbook/dashbook.dart';
import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/sparky_bumper/sparky_bumper_game.dart';
void addSparkyBumperStories(Dashbook dashbook) {
dashbook.storiesOf('Sparky Bumpers').addGame(
title: 'Traced',
description: SparkyBumperGame.description,
gameBuilder: (_) => SparkyBumperGame(),
);
}

@ -9,6 +9,7 @@ class SparkyBumperGame extends BallGame {
Shows how a SparkyBumper is rendered. Shows how a SparkyBumper is rendered.
- Activate the "trace" parameter to overlay the body. - Activate the "trace" parameter to overlay the body.
- Tap anywhere on the screen to spawn a ball into the game.
'''; ''';
@override @override
@ -16,12 +17,12 @@ class SparkyBumperGame extends BallGame {
await super.onLoad(); await super.onLoad();
await images.loadAll([ await images.loadAll([
Assets.images.sparky.bumper.a.active.keyName, Assets.images.sparky.bumper.a.lit.keyName,
Assets.images.sparky.bumper.a.inactive.keyName, Assets.images.sparky.bumper.a.dimmed.keyName,
Assets.images.sparky.bumper.b.active.keyName, Assets.images.sparky.bumper.b.lit.keyName,
Assets.images.sparky.bumper.b.inactive.keyName, Assets.images.sparky.bumper.b.dimmed.keyName,
Assets.images.sparky.bumper.c.active.keyName, Assets.images.sparky.bumper.c.lit.keyName,
Assets.images.sparky.bumper.c.inactive.keyName, Assets.images.sparky.bumper.c.dimmed.keyName,
]); ]);
final center = screenToWorld(camera.viewport.canvasSize! / 2); final center = screenToWorld(camera.viewport.canvasSize! / 2);

@ -0,0 +1,31 @@
import 'dart:async';
import 'package:flame/input.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart';
class SparkyComputerGame extends BallGame {
static const description = '''
Shows how the SparkyComputer is rendered.
- Activate the "trace" parameter to overlay the body.
- Tap anywhere on the screen to spawn a ball into the game.
''';
@override
Future<void> onLoad() async {
await super.onLoad();
await images.loadAll([
Assets.images.sparky.computer.base.keyName,
Assets.images.sparky.computer.top.keyName,
Assets.images.sparky.computer.glow.keyName,
]);
camera.followVector2(Vector2(-10, -40));
await addFromBlueprint(SparkyComputer());
await ready();
await traceAllBodies();
}
}

@ -0,0 +1,18 @@
import 'package:dashbook/dashbook.dart';
import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/sparky_scorch/sparky_bumper_game.dart';
import 'package:sandbox/stories/sparky_scorch/sparky_computer_game.dart';
void addSparkyScorchStories(Dashbook dashbook) {
dashbook.storiesOf('Sparky Scorch')
..addGame(
title: 'Sparky Computer',
description: SparkyComputerGame.description,
gameBuilder: (_) => SparkyComputerGame(),
)
..addGame(
title: 'Sparky Bumper',
description: SparkyBumperGame.description,
gameBuilder: (_) => SparkyBumperGame(),
);
}

@ -14,4 +14,4 @@ export 'multipliers/stories.dart';
export 'plunger/stories.dart'; export 'plunger/stories.dart';
export 'score_text/stories.dart'; export 'score_text/stories.dart';
export 'slingshot/stories.dart'; export 'slingshot/stories.dart';
export 'sparky_bumper/stories.dart'; export 'sparky_scorch/stories.dart';

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 209 KiB

@ -31,7 +31,7 @@ void main() {
whenListen( whenListen(
bloc, bloc,
const Stream<SparkyBumperState>.empty(), const Stream<SparkyBumperState>.empty(),
initialState: SparkyBumperState.active, initialState: SparkyBumperState.lit,
); );
final sparkyBumper = SparkyBumper.test(bloc: bloc); final sparkyBumper = SparkyBumper.test(bloc: bloc);

@ -17,7 +17,7 @@ void main() {
'SparkyBumperBlinkingBehavior', 'SparkyBumperBlinkingBehavior',
() { () {
flameTester.testGameWidget( flameTester.testGameWidget(
'calls onBlinked after 0.05 seconds when inactive', 'calls onBlinked after 0.05 seconds when dimmed',
setUp: (game, tester) async { setUp: (game, tester) async {
final behavior = SparkyBumperBlinkingBehavior(); final behavior = SparkyBumperBlinkingBehavior();
final bloc = MockSparkyBumperCubit(); final bloc = MockSparkyBumperCubit();
@ -25,14 +25,14 @@ void main() {
whenListen( whenListen(
bloc, bloc,
streamController.stream, streamController.stream,
initialState: SparkyBumperState.active, initialState: SparkyBumperState.lit,
); );
final sparkyBumper = SparkyBumper.test(bloc: bloc); final sparkyBumper = SparkyBumper.test(bloc: bloc);
await sparkyBumper.add(behavior); await sparkyBumper.add(behavior);
await game.ensureAdd(sparkyBumper); await game.ensureAdd(sparkyBumper);
streamController.add(SparkyBumperState.inactive); streamController.add(SparkyBumperState.dimmed);
await tester.pump(); await tester.pump();
game.update(0.05); game.update(0.05);

@ -7,17 +7,17 @@ void main() {
'SparkyBumperCubit', 'SparkyBumperCubit',
() { () {
blocTest<SparkyBumperCubit, SparkyBumperState>( blocTest<SparkyBumperCubit, SparkyBumperState>(
'onBallContacted emits inactive', 'onBallContacted emits dimmed',
build: SparkyBumperCubit.new, build: SparkyBumperCubit.new,
act: (bloc) => bloc.onBallContacted(), act: (bloc) => bloc.onBallContacted(),
expect: () => [SparkyBumperState.inactive], expect: () => [SparkyBumperState.dimmed],
); );
blocTest<SparkyBumperCubit, SparkyBumperState>( blocTest<SparkyBumperCubit, SparkyBumperState>(
'onBlinked emits active', 'onBlinked emits lit',
build: SparkyBumperCubit.new, build: SparkyBumperCubit.new,
act: (bloc) => bloc.onBlinked(), act: (bloc) => bloc.onBlinked(),
expect: () => [SparkyBumperState.active], expect: () => [SparkyBumperState.lit],
); );
}, },
); );

@ -13,12 +13,12 @@ import '../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.sparky.bumper.a.active.keyName, Assets.images.sparky.bumper.a.lit.keyName,
Assets.images.sparky.bumper.a.inactive.keyName, Assets.images.sparky.bumper.a.dimmed.keyName,
Assets.images.sparky.bumper.b.active.keyName, Assets.images.sparky.bumper.b.lit.keyName,
Assets.images.sparky.bumper.b.inactive.keyName, Assets.images.sparky.bumper.b.dimmed.keyName,
Assets.images.sparky.bumper.c.active.keyName, Assets.images.sparky.bumper.c.lit.keyName,
Assets.images.sparky.bumper.c.inactive.keyName, Assets.images.sparky.bumper.c.dimmed.keyName,
]; ];
final flameTester = FlameTester(() => TestGame(assets)); final flameTester = FlameTester(() => TestGame(assets));
@ -49,7 +49,7 @@ void main() {
whenListen( whenListen(
bloc, bloc,
const Stream<SparkyBumperState>.empty(), const Stream<SparkyBumperState>.empty(),
initialState: SparkyBumperState.active, initialState: SparkyBumperState.lit,
); );
when(bloc.close).thenAnswer((_) async {}); when(bloc.close).thenAnswer((_) async {});
final sparkyBumper = SparkyBumper.test(bloc: bloc); final sparkyBumper = SparkyBumper.test(bloc: bloc);

@ -10,15 +10,33 @@ import '../../helpers/helpers.dart';
void main() { void main() {
group('SparkyComputer', () { group('SparkyComputer', () {
final tester = FlameTester(TestGame.new); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
Assets.images.sparky.computer.base.keyName,
Assets.images.sparky.computer.top.keyName,
Assets.images.sparky.computer.glow.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
tester.testGameWidget( flameTester.test(
'loads correctly',
(game) async {
await game.addFromBlueprint(SparkyComputer());
await game.ready();
},
);
flameTester.testGameWidget(
'renders correctly', 'renders correctly',
setUp: (game, tester) async { setUp: (game, tester) async {
await game.images.loadAll(assets);
await game.addFromBlueprint(SparkyComputer()); await game.addFromBlueprint(SparkyComputer());
await game.ready(); await game.ready();
await tester.pump();
game.camera.followVector2(Vector2(-15, -50)); game.camera
..followVector2(Vector2(0, -20))
..zoom = 7;
}, },
verify: (game, tester) async { verify: (game, tester) async {
await expectLater( await expectLater(

@ -12,22 +12,25 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.sparky.bumper.a.active.keyName, Assets.images.sparky.computer.top.keyName,
Assets.images.sparky.bumper.a.inactive.keyName, Assets.images.sparky.computer.base.keyName,
Assets.images.sparky.bumper.b.active.keyName, Assets.images.sparky.computer.glow.keyName,
Assets.images.sparky.bumper.b.inactive.keyName,
Assets.images.sparky.bumper.c.active.keyName,
Assets.images.sparky.bumper.c.inactive.keyName,
Assets.images.sparky.animatronic.keyName, Assets.images.sparky.animatronic.keyName,
Assets.images.sparky.bumper.a.lit.keyName,
Assets.images.sparky.bumper.a.dimmed.keyName,
Assets.images.sparky.bumper.b.lit.keyName,
Assets.images.sparky.bumper.b.dimmed.keyName,
Assets.images.sparky.bumper.c.lit.keyName,
Assets.images.sparky.bumper.c.dimmed.keyName,
]; ];
final flameTester = FlameTester( final flameTester = FlameTester(
() => EmptyPinballTestGame(assets: assets), () => EmptyPinballTestGame(assets: assets),
); );
group('SparkyFireZone', () { group('SparkyScorch', () {
flameTester.test('loads correctly', (game) async { flameTester.test('loads correctly', (game) async {
await game.addFromBlueprint(SparkyFireZone()); await game.addFromBlueprint(SparkyScorch());
await game.ready(); await game.ready();
}); });
@ -36,7 +39,7 @@ void main() {
'a SparkyComputer', 'a SparkyComputer',
(game) async { (game) async {
expect( expect(
SparkyFireZone().blueprints.whereType<SparkyComputer>().single, SparkyScorch().blueprints.whereType<SparkyComputer>().single,
isNotNull, isNotNull,
); );
}, },
@ -45,8 +48,8 @@ void main() {
flameTester.test( flameTester.test(
'a SparkyAnimatronic', 'a SparkyAnimatronic',
(game) async { (game) async {
final sparkyFireZone = SparkyFireZone(); final sparkysScorch = SparkyScorch();
await game.addFromBlueprint(sparkyFireZone); await game.addFromBlueprint(sparkysScorch);
await game.ready(); await game.ready();
expect( expect(
@ -59,8 +62,8 @@ void main() {
flameTester.test( flameTester.test(
'three SparkyBumper', 'three SparkyBumper',
(game) async { (game) async {
final sparkyFireZone = SparkyFireZone(); final sparkysScorch = SparkyScorch();
await game.addFromBlueprint(sparkyFireZone); await game.addFromBlueprint(sparkysScorch);
await game.ready(); await game.ready();
expect( expect(

@ -89,22 +89,17 @@ void main() {
Assets.images.android.ramp.arrow.active5.keyName, Assets.images.android.ramp.arrow.active5.keyName,
Assets.images.android.rail.main.keyName, Assets.images.android.rail.main.keyName,
Assets.images.android.rail.exit.keyName, Assets.images.android.rail.exit.keyName,
Assets.images.sparky.bumper.a.active.keyName,
Assets.images.sparky.bumper.a.inactive.keyName,
Assets.images.sparky.bumper.b.active.keyName,
Assets.images.sparky.bumper.b.inactive.keyName,
Assets.images.sparky.bumper.c.active.keyName,
Assets.images.sparky.bumper.c.inactive.keyName,
Assets.images.sparky.animatronic.keyName, Assets.images.sparky.animatronic.keyName,
Assets.images.sparky.computer.top.keyName, Assets.images.sparky.computer.top.keyName,
Assets.images.sparky.computer.base.keyName, Assets.images.sparky.computer.base.keyName,
Assets.images.sparky.computer.glow.keyName,
Assets.images.sparky.animatronic.keyName, Assets.images.sparky.animatronic.keyName,
Assets.images.sparky.bumper.a.inactive.keyName, Assets.images.sparky.bumper.a.lit.keyName,
Assets.images.sparky.bumper.a.active.keyName, Assets.images.sparky.bumper.a.dimmed.keyName,
Assets.images.sparky.bumper.b.active.keyName, Assets.images.sparky.bumper.b.lit.keyName,
Assets.images.sparky.bumper.b.inactive.keyName, Assets.images.sparky.bumper.b.dimmed.keyName,
Assets.images.sparky.bumper.c.active.keyName, Assets.images.sparky.bumper.c.lit.keyName,
Assets.images.sparky.bumper.c.inactive.keyName, Assets.images.sparky.bumper.c.dimmed.keyName,
]; ];
late GameBloc gameBloc; late GameBloc gameBloc;

Loading…
Cancel
Save