feat: include `Ball` final assets (#279)

* refactor: load ball assets from cache

* feat: new ball assets

* refactor: ball loads new sprites

* refactor: modified ball assets for sandbox

* refactor: removing baseColor from ball

* refactor: moved ball assets to pinball_theme

* refactor: removed all baseColor for ball

* refactor: removed unused imports

* test: golden tests for ball

* test: added missed ball assets to tests

* chore: reorder imports

* refactor: removed all default ball, use dash

* test: fixed test for ball changes

* test: adde ball assets to forest tests

* fix: fixed tests for ball

* refactor: removed baseColor from ball tests

* chore: unused imports

* test: removed golden tests for balls

* refactor: removed unused assets at test and renamed spriteAsset for ball

* refactor: spriteAsset changed for ball sprite

Co-authored-by: Tom Arra <tarra3@gmail.com>
pull/338/head
Rui Miguel Alonso 3 years ago committed by GitHub
parent ec6cdba0e8
commit de3569c479
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,7 +1,6 @@
// ignore_for_file: avoid_renaming_method_parameters // ignore_for_file: avoid_renaming_method_parameters
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flutter/material.dart';
import 'package:pinball/game/game.dart'; 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';
@ -17,7 +16,7 @@ class ControlledBall extends Ball with Controls<BallController> {
/// A [Ball] that launches from the [Plunger]. /// A [Ball] that launches from the [Plunger].
ControlledBall.launch({ ControlledBall.launch({
required CharacterTheme characterTheme, required CharacterTheme characterTheme,
}) : super(baseColor: characterTheme.ballColor) { }) : super(assetPath: characterTheme.ball.keyName) {
controller = BallController(this); controller = BallController(this);
layer = Layer.launcher; layer = Layer.launcher;
zIndex = ZIndexes.ballOnLaunchRamp; zIndex = ZIndexes.ballOnLaunchRamp;
@ -28,13 +27,13 @@ class ControlledBall extends Ball with Controls<BallController> {
/// {@endtemplate} /// {@endtemplate}
ControlledBall.bonus({ ControlledBall.bonus({
required CharacterTheme characterTheme, required CharacterTheme characterTheme,
}) : super(baseColor: characterTheme.ballColor) { }) : super(assetPath: characterTheme.ball.keyName) {
controller = BallController(this); controller = BallController(this);
zIndex = ZIndexes.ballOnBoard; zIndex = ZIndexes.ballOnBoard;
} }
/// [Ball] used in [DebugPinballGame]. /// [Ball] used in [DebugPinballGame].
ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) { ControlledBall.debug() : super() {
controller = BallController(this); controller = BallController(this);
zIndex = ZIndexes.ballOnBoard; zIndex = ZIndexes.ballOnBoard;
} }

@ -13,7 +13,6 @@ extension PinballGameAssetsX on PinballGame {
return [ return [
images.load(components.Assets.images.boardBackground.keyName), images.load(components.Assets.images.boardBackground.keyName),
images.load(components.Assets.images.ball.ball.keyName),
images.load(components.Assets.images.ball.flameEffect.keyName), images.load(components.Assets.images.ball.flameEffect.keyName),
images.load(components.Assets.images.signpost.inactive.keyName), images.load(components.Assets.images.signpost.inactive.keyName),
images.load(components.Assets.images.signpost.active1.keyName), images.load(components.Assets.images.signpost.active1.keyName),
@ -136,6 +135,10 @@ extension PinballGameAssetsX on PinballGame {
images.load(sparkyTheme.leaderboardIcon.keyName), images.load(sparkyTheme.leaderboardIcon.keyName),
images.load(androidTheme.leaderboardIcon.keyName), images.load(androidTheme.leaderboardIcon.keyName),
images.load(dinoTheme.leaderboardIcon.keyName), images.load(dinoTheme.leaderboardIcon.keyName),
images.load(androidTheme.ball.keyName),
images.load(dashTheme.ball.keyName),
images.load(dinoTheme.ball.keyName),
images.load(sparkyTheme.ball.keyName),
]; ];
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

@ -2,9 +2,10 @@ import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/material.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';
import 'package:pinball_theme/pinball_theme.dart' as theme;
export 'behaviors/behaviors.dart'; export 'behaviors/behaviors.dart';
@ -14,11 +15,11 @@ export 'behaviors/behaviors.dart';
class Ball extends BodyComponent with Layered, InitialPosition, ZIndex { class Ball extends BodyComponent with Layered, InitialPosition, ZIndex {
/// {@macro ball} /// {@macro ball}
Ball({ Ball({
required this.baseColor, String? assetPath,
}) : super( }) : super(
renderBody: false, renderBody: false,
children: [ children: [
_BallSpriteComponent()..tint(baseColor.withOpacity(0.5)), _BallSpriteComponent(assetPath: assetPath),
BallScalingBehavior(), BallScalingBehavior(),
BallGravitatingBehavior(), BallGravitatingBehavior(),
], ],
@ -35,7 +36,7 @@ class Ball extends BodyComponent with Layered, InitialPosition, ZIndex {
/// ///
/// This can be used for testing [Ball]'s behaviors in isolation. /// This can be used for testing [Ball]'s behaviors in isolation.
@visibleForTesting @visibleForTesting
Ball.test({required this.baseColor}) Ball.test()
: super( : super(
children: [_BallSpriteComponent()], children: [_BallSpriteComponent()],
); );
@ -43,9 +44,6 @@ class Ball extends BodyComponent with Layered, InitialPosition, ZIndex {
/// The size of the [Ball]. /// The size of the [Ball].
static final Vector2 size = Vector2.all(4.13); static final Vector2 size = Vector2.all(4.13);
/// The base [Color] used to tint this [Ball].
final Color baseColor;
@override @override
Body createBody() { Body createBody() {
final shape = CircleShape()..radius = size.x / 2; final shape = CircleShape()..radius = size.x / 2;
@ -79,14 +77,22 @@ class Ball extends BodyComponent with Layered, InitialPosition, ZIndex {
} }
class _BallSpriteComponent extends SpriteComponent with HasGameRef { class _BallSpriteComponent extends SpriteComponent with HasGameRef {
_BallSpriteComponent({
this.assetPath,
}) : super(
anchor: Anchor.center,
);
final String? assetPath;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = await gameRef.loadSprite( final sprite = Sprite(
Assets.images.ball.ball.keyName, gameRef.images
.fromCache(assetPath ?? theme.Assets.images.dash.ball.keyName),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 12.5;
anchor = Anchor.center;
} }
} }

@ -24,6 +24,14 @@ abstract class AssetsGame extends Forge2DGame {
} }
abstract class LineGame extends AssetsGame with PanDetector { abstract class LineGame extends AssetsGame with PanDetector {
LineGame({
List<String>? imagesFileNames,
}) : super(
imagesFileNames: [
if (imagesFileNames != null) ...imagesFileNames,
],
);
Vector2? _lineEnd; Vector2? _lineEnd;
@override @override

@ -7,7 +7,6 @@ import 'package:sandbox/stories/ball/basic_ball_game.dart';
class AndroidBumperAGame extends BallGame { class AndroidBumperAGame extends BallGame {
AndroidBumperAGame() AndroidBumperAGame()
: super( : super(
color: const Color(0xFF0000FF),
imagesFileNames: [ imagesFileNames: [
Assets.images.android.bumper.a.lit.keyName, Assets.images.android.bumper.a.lit.keyName,
Assets.images.android.bumper.a.dimmed.keyName, Assets.images.android.bumper.a.dimmed.keyName,

@ -7,7 +7,6 @@ import 'package:sandbox/stories/ball/basic_ball_game.dart';
class AndroidBumperBGame extends BallGame { class AndroidBumperBGame extends BallGame {
AndroidBumperBGame() AndroidBumperBGame()
: super( : super(
color: const Color(0xFF0000FF),
imagesFileNames: [ imagesFileNames: [
Assets.images.android.bumper.b.lit.keyName, Assets.images.android.bumper.b.lit.keyName,
Assets.images.android.bumper.b.dimmed.keyName, Assets.images.android.bumper.b.dimmed.keyName,

@ -1,14 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'package:flame/input.dart'; import 'package:flame/input.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class SpaceshipRailGame extends BallGame { class SpaceshipRailGame extends BallGame {
SpaceshipRailGame() SpaceshipRailGame()
: super( : super(
color: Colors.blue,
ballPriority: ZIndexes.ballOnSpaceshipRail, ballPriority: ZIndexes.ballOnSpaceshipRail,
ballLayer: Layer.spaceshipExitRail, ballLayer: Layer.spaceshipExitRail,
imagesFileNames: [ imagesFileNames: [

@ -9,7 +9,6 @@ import 'package:sandbox/stories/ball/basic_ball_game.dart';
class SpaceshipRampGame extends BallGame with KeyboardEvents { class SpaceshipRampGame extends BallGame with KeyboardEvents {
SpaceshipRampGame() SpaceshipRampGame()
: super( : super(
color: Colors.blue,
ballPriority: ZIndexes.ballOnSpaceshipRamp, ballPriority: ZIndexes.ballOnSpaceshipRamp,
ballLayer: Layer.spaceshipEntranceRamp, ballLayer: Layer.spaceshipEntranceRamp,
imagesFileNames: [ imagesFileNames: [

@ -1,9 +1,20 @@
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class BallBoosterGame extends LineGame { class BallBoosterGame extends LineGame {
BallBoosterGame()
: super(
imagesFileNames: [
theme.Assets.images.android.ball.keyName,
theme.Assets.images.dash.ball.keyName,
theme.Assets.images.dino.ball.keyName,
theme.Assets.images.sparky.ball.keyName,
Assets.images.ball.flameEffect.keyName,
],
);
static const description = ''' static const description = '''
Shows how a Ball with a boost works. Shows how a Ball with a boost works.
@ -12,7 +23,7 @@ class BallBoosterGame extends LineGame {
@override @override
void onLine(Vector2 line) { void onLine(Vector2 line) {
final ball = Ball(baseColor: Colors.transparent); final ball = Ball();
final impulse = line * -1 * 20; final impulse = line * -1 * 20;
ball.add(BallTurboChargingBehavior(impulse: impulse)); ball.add(BallTurboChargingBehavior(impulse: impulse));

@ -1,17 +1,20 @@
import 'package:flame/input.dart'; import 'package:flame/input.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
class BallGame extends AssetsGame with TapDetector, Traceable { class BallGame extends AssetsGame with TapDetector, Traceable {
BallGame({ BallGame({
this.color = Colors.blue,
this.ballPriority = 0, this.ballPriority = 0,
this.ballLayer = Layer.all, this.ballLayer = Layer.all,
this.character,
List<String>? imagesFileNames, List<String>? imagesFileNames,
}) : super( }) : super(
imagesFileNames: [ imagesFileNames: [
Assets.images.ball.ball.keyName, theme.Assets.images.android.ball.keyName,
theme.Assets.images.dash.ball.keyName,
theme.Assets.images.dino.ball.keyName,
theme.Assets.images.sparky.ball.keyName,
if (imagesFileNames != null) ...imagesFileNames, if (imagesFileNames != null) ...imagesFileNames,
], ],
); );
@ -22,14 +25,23 @@ class BallGame extends AssetsGame with TapDetector, Traceable {
- Tap anywhere on the screen to spawn a ball into the game. - Tap anywhere on the screen to spawn a ball into the game.
'''; ''';
final Color color; static final characterBallPaths = <String, String>{
'Dash': theme.Assets.images.dash.ball.keyName,
'Sparky': theme.Assets.images.sparky.ball.keyName,
'Android': theme.Assets.images.android.ball.keyName,
'Dino': theme.Assets.images.dino.ball.keyName,
};
final int ballPriority; final int ballPriority;
final Layer ballLayer; final Layer ballLayer;
final String? character;
@override @override
void onTapUp(TapUpInfo info) { void onTapUp(TapUpInfo info) {
add( add(
Ball(baseColor: color) Ball(
assetPath: characterBallPaths[character],
)
..initialPosition = info.eventPosition.game ..initialPosition = info.eventPosition.game
..layer = ballLayer ..layer = ballLayer
..priority = ballPriority, ..priority = ballPriority,

@ -1,5 +1,4 @@
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flutter/material.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/ball_booster_game.dart'; import 'package:sandbox/stories/ball/ball_booster_game.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
@ -7,10 +6,14 @@ import 'package:sandbox/stories/ball/basic_ball_game.dart';
void addBallStories(Dashbook dashbook) { void addBallStories(Dashbook dashbook) {
dashbook.storiesOf('Ball') dashbook.storiesOf('Ball')
..addGame( ..addGame(
title: 'Colored', title: 'Themed',
description: BallGame.description, description: BallGame.description,
gameBuilder: (context) => BallGame( gameBuilder: (context) => BallGame(
color: context.colorProperty('color', Colors.blue), character: context.listProperty(
'Character',
BallGame.characterBallPaths.keys.first,
BallGame.characterBallPaths.keys.toList(),
),
), ),
) )
..addGame( ..addGame(

@ -1,14 +1,10 @@
import 'dart:ui';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class GoogleLetterGame extends BallGame { class GoogleLetterGame extends BallGame {
GoogleLetterGame() GoogleLetterGame()
: super( : super(
color: const Color(0xFF009900),
imagesFileNames: [ imagesFileNames: [
Assets.images.googleWord.letter1.lit.keyName, Assets.images.googleWord.letter1.lit.keyName,
Assets.images.googleWord.letter1.dimmed.keyName, Assets.images.googleWord.letter1.dimmed.keyName,

@ -1,14 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'package:flame/input.dart'; import 'package:flame/input.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class LaunchRampGame extends BallGame { class LaunchRampGame extends BallGame {
LaunchRampGame() LaunchRampGame()
: super( : super(
color: Colors.blue,
ballPriority: ZIndexes.ballOnLaunchRamp, ballPriority: ZIndexes.ballOnLaunchRamp,
ballLayer: Layer.launcher, ballLayer: Layer.launcher,
); );

@ -6,8 +6,6 @@ import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class PlungerGame extends BallGame with KeyboardEvents, Traceable { class PlungerGame extends BallGame with KeyboardEvents, Traceable {
PlungerGame() : super(color: const Color(0xFFFF0000));
static const description = ''' static const description = '''
Shows how Plunger is rendered. Shows how Plunger is rendered.

@ -2,31 +2,36 @@
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../helpers/helpers.dart'; import '../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
theme.Assets.images.android.ball.keyName,
theme.Assets.images.dash.ball.keyName,
theme.Assets.images.dino.ball.keyName,
theme.Assets.images.sparky.ball.keyName,
];
group('Ball', () { final flameTester = FlameTester(() => TestGame(assets));
const baseColor = Color(0xFFFFFFFF);
group('Ball', () {
test( test(
'can be instantiated', 'can be instantiated',
() { () {
expect(Ball(baseColor: baseColor), isA<Ball>()); expect(Ball(), isA<Ball>());
expect(Ball.test(baseColor: baseColor), isA<Ball>()); expect(Ball.test(), isA<Ball>());
}, },
); );
flameTester.test( flameTester.test(
'loads correctly', 'loads correctly',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ready(); await game.ready();
await game.ensureAdd(ball); await game.ensureAdd(ball);
@ -36,7 +41,7 @@ void main() {
group('adds', () { group('adds', () {
flameTester.test('a BallScalingBehavior', (game) async { flameTester.test('a BallScalingBehavior', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
expect( expect(
ball.descendants().whereType<BallScalingBehavior>().length, ball.descendants().whereType<BallScalingBehavior>().length,
@ -45,7 +50,7 @@ void main() {
}); });
flameTester.test('a BallGravitatingBehavior', (game) async { flameTester.test('a BallGravitatingBehavior', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
expect( expect(
ball.descendants().whereType<BallGravitatingBehavior>().length, ball.descendants().whereType<BallGravitatingBehavior>().length,
@ -58,7 +63,7 @@ void main() {
flameTester.test( flameTester.test(
'is dynamic', 'is dynamic',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
expect(ball.body.bodyType, equals(BodyType.dynamic)); expect(ball.body.bodyType, equals(BodyType.dynamic));
@ -67,7 +72,7 @@ void main() {
group('can be moved', () { group('can be moved', () {
flameTester.test('by its weight', (game) async { flameTester.test('by its weight', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
game.update(1); game.update(1);
@ -75,7 +80,7 @@ void main() {
}); });
flameTester.test('by applying velocity', (game) async { flameTester.test('by applying velocity', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
ball.body.gravityScale = Vector2.zero(); ball.body.gravityScale = Vector2.zero();
@ -90,7 +95,7 @@ void main() {
flameTester.test( flameTester.test(
'exists', 'exists',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
expect(ball.body.fixtures[0], isA<Fixture>()); expect(ball.body.fixtures[0], isA<Fixture>());
@ -100,7 +105,7 @@ void main() {
flameTester.test( flameTester.test(
'is dense', 'is dense',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
final fixture = ball.body.fixtures[0]; final fixture = ball.body.fixtures[0];
@ -111,7 +116,7 @@ void main() {
flameTester.test( flameTester.test(
'shape is circular', 'shape is circular',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
final fixture = ball.body.fixtures[0]; final fixture = ball.body.fixtures[0];
@ -123,7 +128,7 @@ void main() {
flameTester.test( flameTester.test(
'has Layer.all as default filter maskBits', 'has Layer.all as default filter maskBits',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ready(); await game.ready();
await game.ensureAdd(ball); await game.ensureAdd(ball);
await game.ready(); await game.ready();
@ -137,7 +142,7 @@ void main() {
group('stop', () { group('stop', () {
group("can't be moved", () { group("can't be moved", () {
flameTester.test('by its weight', (game) async { flameTester.test('by its weight', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
ball.stop(); ball.stop();
@ -152,7 +157,7 @@ void main() {
flameTester.test( flameTester.test(
'by its weight when previously stopped', 'by its weight when previously stopped',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
ball.stop(); ball.stop();
ball.resume(); ball.resume();
@ -165,7 +170,7 @@ void main() {
flameTester.test( flameTester.test(
'by applying velocity when previously stopped', 'by applying velocity when previously stopped',
(game) async { (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
ball.stop(); ball.stop();
ball.resume(); ball.resume();

@ -1,21 +1,19 @@
// ignore_for_file: cascade_invocations // ignore_for_file: cascade_invocations
import 'dart:ui';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final asset = Assets.images.ball.ball.keyName; final asset = theme.Assets.images.dash.ball.keyName;
final flameTester = FlameTester(() => TestGame([asset])); final flameTester = FlameTester(() => TestGame([asset]));
group('BallGravitatingBehavior', () { group('BallGravitatingBehavior', () {
const baseColor = Color(0xFFFFFFFF);
test('can be instantiated', () { test('can be instantiated', () {
expect( expect(
BallGravitatingBehavior(), BallGravitatingBehavior(),
@ -24,7 +22,7 @@ void main() {
}); });
flameTester.test('can be loaded', (game) async { flameTester.test('can be loaded', (game) async {
final ball = Ball.test(baseColor: baseColor); final ball = Ball.test();
final behavior = BallGravitatingBehavior(); final behavior = BallGravitatingBehavior();
await ball.add(behavior); await ball.add(behavior);
await game.ensureAdd(ball); await game.ensureAdd(ball);
@ -37,12 +35,10 @@ void main() {
flameTester.test( flameTester.test(
"overrides the body's horizontal gravity symmetrically", "overrides the body's horizontal gravity symmetrically",
(game) async { (game) async {
final ball1 = Ball.test(baseColor: baseColor) final ball1 = Ball.test()..initialPosition = Vector2(10, 0);
..initialPosition = Vector2(10, 0);
await ball1.add(BallGravitatingBehavior()); await ball1.add(BallGravitatingBehavior());
final ball2 = Ball.test(baseColor: baseColor) final ball2 = Ball.test()..initialPosition = Vector2(-10, 0);
..initialPosition = Vector2(-10, 0);
await ball2.add(BallGravitatingBehavior()); await ball2.add(BallGravitatingBehavior());
await game.ensureAddAll([ball1, ball2]); await game.ensureAddAll([ball1, ball2]);

@ -1,21 +1,19 @@
// ignore_for_file: cascade_invocations // ignore_for_file: cascade_invocations
import 'dart:ui';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final asset = Assets.images.ball.ball.keyName; final asset = theme.Assets.images.dash.ball.keyName;
final flameTester = FlameTester(() => TestGame([asset])); final flameTester = FlameTester(() => TestGame([asset]));
group('BallScalingBehavior', () { group('BallScalingBehavior', () {
const baseColor = Color(0xFFFFFFFF);
test('can be instantiated', () { test('can be instantiated', () {
expect( expect(
BallScalingBehavior(), BallScalingBehavior(),
@ -24,7 +22,7 @@ void main() {
}); });
flameTester.test('can be loaded', (game) async { flameTester.test('can be loaded', (game) async {
final ball = Ball.test(baseColor: baseColor); final ball = Ball.test();
final behavior = BallScalingBehavior(); final behavior = BallScalingBehavior();
await ball.add(behavior); await ball.add(behavior);
await game.ensureAdd(ball); await game.ensureAdd(ball);
@ -35,12 +33,10 @@ void main() {
}); });
flameTester.test('scales the shape radius', (game) async { flameTester.test('scales the shape radius', (game) async {
final ball1 = Ball.test(baseColor: baseColor) final ball1 = Ball.test()..initialPosition = Vector2(0, 10);
..initialPosition = Vector2(0, 10);
await ball1.add(BallScalingBehavior()); await ball1.add(BallScalingBehavior());
final ball2 = Ball.test(baseColor: baseColor) final ball2 = Ball.test()..initialPosition = Vector2(0, -10);
..initialPosition = Vector2(0, -10);
await ball2.add(BallScalingBehavior()); await ball2.add(BallScalingBehavior());
await game.ensureAddAll([ball1, ball2]); await game.ensureAddAll([ball1, ball2]);
@ -57,12 +53,10 @@ void main() {
flameTester.test( flameTester.test(
'scales the sprite', 'scales the sprite',
(game) async { (game) async {
final ball1 = Ball.test(baseColor: baseColor) final ball1 = Ball.test()..initialPosition = Vector2(0, 10);
..initialPosition = Vector2(0, 10);
await ball1.add(BallScalingBehavior()); await ball1.add(BallScalingBehavior());
final ball2 = Ball.test(baseColor: baseColor) final ball2 = Ball.test()..initialPosition = Vector2(0, -10);
..initialPosition = Vector2(0, -10);
await ball2.add(BallScalingBehavior()); await ball2.add(BallScalingBehavior());
await game.ensureAddAll([ball1, ball2]); await game.ensureAddAll([ball1, ball2]);

@ -1,12 +1,10 @@
// ignore_for_file: cascade_invocations // ignore_for_file: cascade_invocations
import 'dart:ui';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
@ -16,9 +14,8 @@ void main() {
group( group(
'BallTurboChargingBehavior', 'BallTurboChargingBehavior',
() { () {
final assets = [Assets.images.ball.ball.keyName]; final asset = theme.Assets.images.dash.ball.keyName;
final flameTester = FlameTester(() => TestGame(assets)); final flameTester = FlameTester(() => TestGame([asset]));
const baseColor = Color(0xFFFFFFFF);
test('can be instantiated', () { test('can be instantiated', () {
expect( expect(
@ -28,7 +25,7 @@ void main() {
}); });
flameTester.test('can be loaded', (game) async { flameTester.test('can be loaded', (game) async {
final ball = Ball.test(baseColor: baseColor); final ball = Ball.test();
final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); final behavior = BallTurboChargingBehavior(impulse: Vector2.zero());
await ball.add(behavior); await ball.add(behavior);
await game.ensureAdd(ball); await game.ensureAdd(ball);
@ -41,7 +38,7 @@ void main() {
flameTester.test( flameTester.test(
'impulses the ball velocity when loaded', 'impulses the ball velocity when loaded',
(game) async { (game) async {
final ball = Ball.test(baseColor: baseColor); final ball = Ball.test();
await game.ensureAdd(ball); await game.ensureAdd(ball);
final impulse = Vector2.all(1); final impulse = Vector2.all(1);
final behavior = BallTurboChargingBehavior(impulse: impulse); final behavior = BallTurboChargingBehavior(impulse: impulse);
@ -59,7 +56,7 @@ void main() {
); );
flameTester.test('adds sprite', (game) async { flameTester.test('adds sprite', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
await ball.ensureAdd( await ball.ensureAdd(
@ -73,7 +70,7 @@ void main() {
}); });
flameTester.test('removes sprite after it finishes', (game) async { flameTester.test('removes sprite after it finishes', (game) async {
final ball = Ball(baseColor: baseColor); final ball = Ball();
await game.ensureAdd(ball); await game.ensureAdd(ball);
final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); final behavior = BallTurboChargingBehavior(impulse: Vector2.zero());

@ -4,11 +4,11 @@ import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_components/src/components/chrome_dino/behaviors/behaviors.dart'; import 'package:pinball_components/src/components/chrome_dino/behaviors/behaviors.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
@ -20,7 +20,10 @@ class _MockFixture extends Mock implements Fixture {}
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
theme.Assets.images.dash.ball.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
group( group(
'ChromeDinoChompingBehavior', 'ChromeDinoChompingBehavior',
@ -35,7 +38,7 @@ void main() {
flameTester.test( flameTester.test(
'beginContact sets ball sprite to be invisible and calls onChomp', 'beginContact sets ball sprite to be invisible and calls onChomp',
(game) async { (game) async {
final ball = Ball(baseColor: Colors.red); final ball = Ball();
final behavior = ChromeDinoChompingBehavior(); final behavior = ChromeDinoChompingBehavior();
final bloc = _MockChromeDinoCubit(); final bloc = _MockChromeDinoCubit();
whenListen( whenListen(

@ -5,11 +5,11 @@ import 'dart:async';
import 'package:bloc_test/bloc_test.dart'; import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_components/src/components/chrome_dino/behaviors/behaviors.dart'; import 'package:pinball_components/src/components/chrome_dino/behaviors/behaviors.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
@ -17,7 +17,10 @@ class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {}
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
theme.Assets.images.dash.ball.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
group( group(
'ChromeDinoSpittingBehavior', 'ChromeDinoSpittingBehavior',
@ -33,7 +36,7 @@ void main() {
flameTester.test( flameTester.test(
'sets ball sprite to visible and sets a linear velocity', 'sets ball sprite to visible and sets a linear velocity',
(game) async { (game) async {
final ball = Ball(baseColor: Colors.red); final ball = Ball();
final behavior = ChromeDinoSpittingBehavior(); final behavior = ChromeDinoSpittingBehavior();
final bloc = _MockChromeDinoCubit(); final bloc = _MockChromeDinoCubit();
final streamController = StreamController<ChromeDinoState>(); final streamController = StreamController<ChromeDinoState>();
@ -71,7 +74,7 @@ void main() {
flameTester.test( flameTester.test(
'calls onSpit', 'calls onSpit',
(game) async { (game) async {
final ball = Ball(baseColor: Colors.red); final ball = Ball();
final behavior = ChromeDinoSpittingBehavior(); final behavior = ChromeDinoSpittingBehavior();
final bloc = _MockChromeDinoCubit(); final bloc = _MockChromeDinoCubit();
final streamController = StreamController<ChromeDinoState>(); final streamController = StreamController<ChromeDinoState>();

@ -1,5 +1,4 @@
import 'package:bloc_test/bloc_test.dart'; import 'package:bloc_test/bloc_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -7,7 +6,7 @@ void main() {
group( group(
'ChromeDinoCubit', 'ChromeDinoCubit',
() { () {
final ball = Ball(baseColor: Colors.red); final ball = Ball();
blocTest<ChromeDinoCubit, ChromeDinoState>( blocTest<ChromeDinoCubit, ChromeDinoState>(
'onOpenMouth emits true', 'onOpenMouth emits true',

@ -1,6 +1,5 @@
// ignore_for_file: prefer_const_constructors // ignore_for_file: prefer_const_constructors
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -61,7 +60,7 @@ void main() {
'copies correctly ' 'copies correctly '
'when all arguments specified', 'when all arguments specified',
() { () {
final ball = Ball(baseColor: Colors.red); final ball = Ball();
const chromeDinoState = ChromeDinoState( const chromeDinoState = ChromeDinoState(
status: ChromeDinoStatus.chomping, status: ChromeDinoStatus.chomping,
isMouthOpen: true, isMouthOpen: true,

@ -2,9 +2,9 @@
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../helpers/helpers.dart'; import '../../helpers/helpers.dart';
@ -13,6 +13,7 @@ void main() {
final assets = [ final assets = [
Assets.images.flipper.left.keyName, Assets.images.flipper.left.keyName,
Assets.images.flipper.right.keyName, Assets.images.flipper.right.keyName,
theme.Assets.images.dash.ball.keyName,
]; ];
final flameTester = FlameTester(() => TestGame(assets)); final flameTester = FlameTester(() => TestGame(assets));
@ -89,7 +90,7 @@ void main() {
'has greater mass than Ball', 'has greater mass than Ball',
(game) async { (game) async {
final flipper = Flipper(side: BoardSide.left); final flipper = Flipper(side: BoardSide.left);
final ball = Ball(baseColor: Colors.white); final ball = Ball();
await game.ready(); await game.ready();
await game.ensureAddAll([flipper, ball]); await game.ensureAddAll([flipper, ball]);

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

@ -36,9 +36,9 @@ class $AssetsImagesAndroidGen {
AssetGenImage get background => AssetGenImage get background =>
const AssetGenImage('assets/images/android/background.png'); const AssetGenImage('assets/images/android/background.png');
/// File path: assets/images/android/character.png /// File path: assets/images/android/ball.png
AssetGenImage get character => AssetGenImage get ball =>
const AssetGenImage('assets/images/android/character.png'); const AssetGenImage('assets/images/android/ball.png');
/// File path: assets/images/android/icon.png /// File path: assets/images/android/icon.png
AssetGenImage get icon => AssetGenImage get icon =>
@ -60,9 +60,8 @@ class $AssetsImagesDashGen {
AssetGenImage get background => AssetGenImage get background =>
const AssetGenImage('assets/images/dash/background.png'); const AssetGenImage('assets/images/dash/background.png');
/// File path: assets/images/dash/character.png /// File path: assets/images/dash/ball.png
AssetGenImage get character => AssetGenImage get ball => const AssetGenImage('assets/images/dash/ball.png');
const AssetGenImage('assets/images/dash/character.png');
/// File path: assets/images/dash/icon.png /// File path: assets/images/dash/icon.png
AssetGenImage get icon => const AssetGenImage('assets/images/dash/icon.png'); AssetGenImage get icon => const AssetGenImage('assets/images/dash/icon.png');
@ -83,9 +82,8 @@ class $AssetsImagesDinoGen {
AssetGenImage get background => AssetGenImage get background =>
const AssetGenImage('assets/images/dino/background.png'); const AssetGenImage('assets/images/dino/background.png');
/// File path: assets/images/dino/character.png /// File path: assets/images/dino/ball.png
AssetGenImage get character => AssetGenImage get ball => const AssetGenImage('assets/images/dino/ball.png');
const AssetGenImage('assets/images/dino/character.png');
/// File path: assets/images/dino/icon.png /// File path: assets/images/dino/icon.png
AssetGenImage get icon => const AssetGenImage('assets/images/dino/icon.png'); AssetGenImage get icon => const AssetGenImage('assets/images/dino/icon.png');
@ -106,9 +104,9 @@ class $AssetsImagesSparkyGen {
AssetGenImage get background => AssetGenImage get background =>
const AssetGenImage('assets/images/sparky/background.png'); const AssetGenImage('assets/images/sparky/background.png');
/// File path: assets/images/sparky/character.png /// File path: assets/images/sparky/ball.png
AssetGenImage get character => AssetGenImage get ball =>
const AssetGenImage('assets/images/sparky/character.png'); const AssetGenImage('assets/images/sparky/ball.png');
/// File path: assets/images/sparky/icon.png /// File path: assets/images/sparky/icon.png
AssetGenImage get icon => AssetGenImage get icon =>

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
/// {@template android_theme} /// {@template android_theme}
@ -12,7 +11,7 @@ class AndroidTheme extends CharacterTheme {
String get name => 'Android'; String get name => 'Android';
@override @override
Color get ballColor => Colors.green; AssetGenImage get ball => Assets.images.android.ball;
@override @override
AssetGenImage get background => Assets.images.android.background; AssetGenImage get background => Assets.images.android.background;

@ -1,5 +1,4 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
/// {@template character_theme} /// {@template character_theme}
@ -15,8 +14,8 @@ abstract class CharacterTheme extends Equatable {
/// Name of character. /// Name of character.
String get name; String get name;
/// Ball color for this theme. /// Asset for the ball.
Color get ballColor; AssetGenImage get ball;
/// Asset for the background. /// Asset for the background.
AssetGenImage get background; AssetGenImage get background;
@ -33,7 +32,7 @@ abstract class CharacterTheme extends Equatable {
@override @override
List<Object?> get props => [ List<Object?> get props => [
name, name,
ballColor, ball,
background, background,
icon, icon,
leaderboardIcon, leaderboardIcon,

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
/// {@template dash_theme} /// {@template dash_theme}
@ -12,7 +11,7 @@ class DashTheme extends CharacterTheme {
String get name => 'Dash'; String get name => 'Dash';
@override @override
Color get ballColor => Colors.blue; AssetGenImage get ball => Assets.images.dash.ball;
@override @override
AssetGenImage get background => Assets.images.dash.background; AssetGenImage get background => Assets.images.dash.background;

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
/// {@template dino_theme} /// {@template dino_theme}
@ -12,7 +11,7 @@ class DinoTheme extends CharacterTheme {
String get name => 'Dino'; String get name => 'Dino';
@override @override
Color get ballColor => Colors.grey; AssetGenImage get ball => Assets.images.dino.ball;
@override @override
AssetGenImage get background => Assets.images.dino.background; AssetGenImage get background => Assets.images.dino.background;

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
/// {@template sparky_theme} /// {@template sparky_theme}
@ -9,7 +8,7 @@ class SparkyTheme extends CharacterTheme {
const SparkyTheme(); const SparkyTheme();
@override @override
Color get ballColor => Colors.orange; AssetGenImage get ball => Assets.images.sparky.ball;
@override @override
String get name => 'Sparky'; String get name => 'Sparky';

@ -2,13 +2,12 @@
import 'package:bloc_test/bloc_test.dart'; import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../helpers/helpers.dart'; import '../../helpers/helpers.dart';
@ -33,13 +32,16 @@ class _MockBall extends Mock implements Ball {}
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
theme.Assets.images.dash.ball.keyName,
];
group('BallController', () { group('BallController', () {
late Ball ball; late Ball ball;
late GameBloc gameBloc; late GameBloc gameBloc;
setUp(() { setUp(() {
ball = Ball(baseColor: const Color(0xFF00FFFF)); ball = Ball();
gameBloc = _MockGameBloc(); gameBloc = _MockGameBloc();
whenListen( whenListen(
gameBloc, gameBloc,
@ -51,6 +53,7 @@ void main() {
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
test('can be instantiated', () { test('can be instantiated', () {
@ -68,7 +71,7 @@ void main() {
await ball.add(controller); await ball.add(controller);
await game.ensureAdd(ball); await game.ensureAdd(ball);
final otherBall = Ball(baseColor: const Color(0xFF00FFFF)); final otherBall = Ball();
final otherController = BallController(otherBall); final otherController = BallController(otherBall);
await otherBall.add(otherController); await otherBall.add(otherController);
await game.ensureAdd(otherBall); await game.ensureAdd(otherBall);
@ -106,6 +109,7 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'adds TurboChargeActivated', 'adds TurboChargeActivated',
setUp: (game, tester) async { setUp: (game, tester) async {
await game.images.loadAll(assets);
final controller = BallController(ball); final controller = BallController(ball);
await ball.add(controller); await ball.add(controller);
await game.ensureAdd(ball); await game.ensureAdd(ball);

@ -10,15 +10,21 @@ import 'package:pinball/game/components/flutter_forest/behaviors/behaviors.dart'
import 'package:pinball/game/game.dart'; 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';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
class _MockGameBloc extends Mock implements GameBloc {} class _MockGameBloc extends Mock implements GameBloc {}
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('FlutterForestBonusBehavior', () { group('FlutterForestBonusBehavior', () {
late GameBloc gameBloc; late GameBloc gameBloc;
final assets = [Assets.images.dash.animatronic.keyName]; final assets = [
Assets.images.dash.animatronic.keyName,
theme.Assets.images.dash.ball.keyName,
];
setUp(() { setUp(() {
gameBloc = _MockGameBloc(); gameBloc = _MockGameBloc();
@ -32,6 +38,7 @@ void main() {
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
void _contactedBumper(DashNestBumper bumper) => void _contactedBumper(DashNestBumper bumper) =>

@ -8,6 +8,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme;
import '../helpers/helpers.dart'; import '../helpers/helpers.dart';
@ -43,7 +44,10 @@ void main() {
Assets.images.backbox.marquee.keyName, Assets.images.backbox.marquee.keyName,
Assets.images.backbox.displayDivider.keyName, Assets.images.backbox.displayDivider.keyName,
Assets.images.boardBackground.keyName, Assets.images.boardBackground.keyName,
Assets.images.ball.ball.keyName, theme.Assets.images.android.ball.keyName,
theme.Assets.images.dash.ball.keyName,
theme.Assets.images.dino.ball.keyName,
theme.Assets.images.sparky.ball.keyName,
Assets.images.ball.flameEffect.keyName, Assets.images.ball.flameEffect.keyName,
Assets.images.baseboard.left.keyName, Assets.images.baseboard.left.keyName,
Assets.images.baseboard.right.keyName, Assets.images.baseboard.right.keyName,

Loading…
Cancel
Save