refactor: score enum to Points

pull/276/head
RuiAlonso 3 years ago
parent 514963373d
commit b5f2bedb07

@ -16,17 +16,17 @@ class AndroidAcres extends Blueprint {
components: [ components: [
AndroidBumper.a( AndroidBumper.a(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-25, 1.3), )..initialPosition = Vector2(-25, 1.3),
AndroidBumper.b( AndroidBumper.b(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-32.8, -9.2), )..initialPosition = Vector2(-32.8, -9.2),
AndroidBumper.cow( AndroidBumper.cow(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-20.5, -13.8), )..initialPosition = Vector2(-20.5, -13.8),
], ],

@ -49,7 +49,7 @@ class _BottomGroupSide extends Component {
final kicker = Kicker( final kicker = Kicker(
side: _side, side: _side,
children: [ children: [
ScoringBehavior(points: Score.points_5k), ScoringBehavior(points: Points.points_5k),
], ],
)..initialPosition = Vector2( )..initialPosition = Vector2(
(22.4 * direction) + centerXAdjustment, (22.4 * direction) + centerXAdjustment,

@ -18,22 +18,22 @@ class FlutterForest extends Component {
children: [ children: [
Signpost( Signpost(
children: [ children: [
ScoringBehavior(points: Score.points_5k), ScoringBehavior(points: Points.points_5k),
], ],
)..initialPosition = Vector2(8.35, -58.3), )..initialPosition = Vector2(8.35, -58.3),
DashNestBumper.main( DashNestBumper.main(
children: [ children: [
ScoringBehavior(points: Score.points_200k), ScoringBehavior(points: Points.points_200k),
], ],
)..initialPosition = Vector2(18.55, -59.35), )..initialPosition = Vector2(18.55, -59.35),
DashNestBumper.a( DashNestBumper.a(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(8.95, -51.95), )..initialPosition = Vector2(8.95, -51.95),
DashNestBumper.b( DashNestBumper.b(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(23.3, -46.75), )..initialPosition = Vector2(23.3, -46.75),
DashAnimatronic()..position = Vector2(20, -66), DashAnimatronic()..position = Vector2(20, -66),

@ -15,27 +15,27 @@ class GoogleWord extends Component {
children: [ children: [
GoogleLetter( GoogleLetter(
0, 0,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(-12.92, 1.82), )..initialPosition = position + Vector2(-12.92, 1.82),
GoogleLetter( GoogleLetter(
1, 1,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(-8.33, -0.65), )..initialPosition = position + Vector2(-8.33, -0.65),
GoogleLetter( GoogleLetter(
2, 2,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(-2.88, -1.75), )..initialPosition = position + Vector2(-2.88, -1.75),
GoogleLetter( GoogleLetter(
3, 3,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(2.88, -1.75), )..initialPosition = position + Vector2(2.88, -1.75),
GoogleLetter( GoogleLetter(
4, 4,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(8.33, -0.65), )..initialPosition = position + Vector2(8.33, -0.65),
GoogleLetter( GoogleLetter(
5, 5,
children: [ScoringBehavior(points: Score.points_5k)], children: [ScoringBehavior(points: Points.points_5k)],
)..initialPosition = position + Vector2(12.92, 1.82), )..initialPosition = position + Vector2(12.92, 1.82),
GoogleWordBonusBehavior(), GoogleWordBonusBehavior(),
], ],

@ -12,10 +12,10 @@ import 'package:pinball_flame/pinball_flame.dart';
class ScoringBehavior extends ContactBehavior with HasGameRef<PinballGame> { class ScoringBehavior extends ContactBehavior with HasGameRef<PinballGame> {
/// {@macro scoring_behavior} /// {@macro scoring_behavior}
ScoringBehavior({ ScoringBehavior({
required Score points, required Points points,
}) : _points = points; }) : _points = points;
final Score _points; final Points _points;
@override @override
void beginContact(Object other, Contact contact) { void beginContact(Object other, Contact contact) {
@ -26,7 +26,7 @@ class ScoringBehavior extends ContactBehavior with HasGameRef<PinballGame> {
gameRef.audio.score(); gameRef.audio.score();
gameRef.add( gameRef.add(
ScoreComponent( ScoreComponent(
score: _points, points: _points,
position: other.body.position, position: other.body.position,
), ),
); );

@ -16,17 +16,17 @@ class SparkyScorch extends Blueprint {
components: [ components: [
SparkyBumper.a( SparkyBumper.a(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-22.9, -41.65), )..initialPosition = Vector2(-22.9, -41.65),
SparkyBumper.b( SparkyBumper.b(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-21.25, -57.9), )..initialPosition = Vector2(-21.25, -57.9),
SparkyBumper.c( SparkyBumper.c(
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
)..initialPosition = Vector2(-3.3, -52.55), )..initialPosition = Vector2(-3.3, -52.55),
SparkyComputerSensor()..initialPosition = Vector2(-13, -49.8), SparkyComputerSensor()..initialPosition = Vector2(-13, -49.8),
@ -49,7 +49,7 @@ class SparkyComputerSensor extends BodyComponent
: super( : super(
renderBody: false, renderBody: false,
children: [ children: [
ScoringBehavior(points: Score.points_20k), ScoringBehavior(points: Points.points_20k),
], ],
); );

@ -110,10 +110,10 @@ abstract class RenderPriority {
static const int androidBumper = _above + ballOnBoard; static const int androidBumper = _above + ballOnBoard;
// Score Text // Score
static const int scoreText = _above + spaceshipRampForegroundRailing; static const int score = _above + spaceshipRampForegroundRailing;
// Debug information // Debug information
static const int debugInfo = _above + scoreText; static const int debugInfo = _above + score;
} }

@ -6,7 +6,7 @@ import 'package:flame/components.dart';
import 'package:flame/effects.dart'; import 'package:flame/effects.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
enum Score { enum Points {
points_5k, points_5k,
points_10k, points_10k,
points_15k, points_15k,
@ -39,23 +39,23 @@ enum Score {
class ScoreComponent extends SpriteComponent with HasGameRef { class ScoreComponent extends SpriteComponent with HasGameRef {
/// {@macro score_component} /// {@macro score_component}
ScoreComponent({ ScoreComponent({
required this.score, required this.points,
required Vector2 position, required Vector2 position,
}) : super( }) : super(
position: position, position: position,
anchor: Anchor.center, anchor: Anchor.center,
priority: RenderPriority.scoreText, priority: RenderPriority.score,
); );
late final Effect _effect; late final Effect _effect;
late Score score; late Points points;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final sprite = Sprite( final sprite = Sprite(
gameRef.images.fromCache(score.asset), gameRef.images.fromCache(points.asset),
); );
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 55; size = sprite.originalSize / 55;
@ -78,107 +78,107 @@ class ScoreComponent extends SpriteComponent with HasGameRef {
} }
} }
extension ScoredX on Score { extension PointsX on Points {
int get value { int get value {
switch (this) { switch (this) {
case Score.points_5k: case Points.points_5k:
return 5000; return 5000;
case Score.points_10k: case Points.points_10k:
return 10000; return 10000;
case Score.points_15k: case Points.points_15k:
return 15000; return 15000;
case Score.points_20k: case Points.points_20k:
return 20000; return 20000;
case Score.points_25k: case Points.points_25k:
return 25000; return 25000;
case Score.points_30k: case Points.points_30k:
return 30000; return 30000;
case Score.points_40k: case Points.points_40k:
return 40000; return 40000;
case Score.points_50k: case Points.points_50k:
return 50000; return 50000;
case Score.points_60k: case Points.points_60k:
return 60000; return 60000;
case Score.points_80k: case Points.points_80k:
return 80000; return 80000;
case Score.points_100k: case Points.points_100k:
return 100000; return 100000;
case Score.points_120k: case Points.points_120k:
return 120000; return 120000;
case Score.points_200k: case Points.points_200k:
return 200000; return 200000;
case Score.points_400k: case Points.points_400k:
return 400000; return 400000;
case Score.points_600k: case Points.points_600k:
return 600000; return 600000;
case Score.points_800k: case Points.points_800k:
return 800000; return 800000;
case Score.points_1m: case Points.points_1m:
return 1000000; return 1000000;
case Score.points_1m2: case Points.points_1m2:
return 1200000; return 1200000;
case Score.points_2m: case Points.points_2m:
return 2000000; return 2000000;
case Score.points_3m: case Points.points_3m:
return 3000000; return 3000000;
case Score.points_4m: case Points.points_4m:
return 4000000; return 4000000;
case Score.points_5m: case Points.points_5m:
return 5000000; return 5000000;
case Score.points_6m: case Points.points_6m:
return 6000000; return 6000000;
} }
} }
} }
extension on Score { extension on Points {
String get asset { String get asset {
switch (this) { switch (this) {
case Score.points_5k: case Points.points_5k:
return Assets.images.score.points5k.keyName; return Assets.images.score.points5k.keyName;
case Score.points_10k: case Points.points_10k:
return Assets.images.score.points10k.keyName; return Assets.images.score.points10k.keyName;
case Score.points_15k: case Points.points_15k:
return Assets.images.score.points15k.keyName; return Assets.images.score.points15k.keyName;
case Score.points_20k: case Points.points_20k:
return Assets.images.score.points20k.keyName; return Assets.images.score.points20k.keyName;
case Score.points_25k: case Points.points_25k:
return Assets.images.score.points25k.keyName; return Assets.images.score.points25k.keyName;
case Score.points_30k: case Points.points_30k:
return Assets.images.score.points30k.keyName; return Assets.images.score.points30k.keyName;
case Score.points_40k: case Points.points_40k:
return Assets.images.score.points40k.keyName; return Assets.images.score.points40k.keyName;
case Score.points_50k: case Points.points_50k:
return Assets.images.score.points50k.keyName; return Assets.images.score.points50k.keyName;
case Score.points_60k: case Points.points_60k:
return Assets.images.score.points60k.keyName; return Assets.images.score.points60k.keyName;
case Score.points_80k: case Points.points_80k:
return Assets.images.score.points80k.keyName; return Assets.images.score.points80k.keyName;
case Score.points_100k: case Points.points_100k:
return Assets.images.score.points100k.keyName; return Assets.images.score.points100k.keyName;
case Score.points_120k: case Points.points_120k:
return Assets.images.score.points120k.keyName; return Assets.images.score.points120k.keyName;
case Score.points_200k: case Points.points_200k:
return Assets.images.score.points200k.keyName; return Assets.images.score.points200k.keyName;
case Score.points_400k: case Points.points_400k:
return Assets.images.score.points400k.keyName; return Assets.images.score.points400k.keyName;
case Score.points_600k: case Points.points_600k:
return Assets.images.score.points600k.keyName; return Assets.images.score.points600k.keyName;
case Score.points_800k: case Points.points_800k:
return Assets.images.score.points800k.keyName; return Assets.images.score.points800k.keyName;
case Score.points_1m: case Points.points_1m:
return Assets.images.score.points1m.keyName; return Assets.images.score.points1m.keyName;
case Score.points_1m2: case Points.points_1m2:
return Assets.images.score.points1m2.keyName; return Assets.images.score.points1m2.keyName;
case Score.points_2m: case Points.points_2m:
return Assets.images.score.points2m.keyName; return Assets.images.score.points2m.keyName;
case Score.points_3m: case Points.points_3m:
return Assets.images.score.points3m.keyName; return Assets.images.score.points3m.keyName;
case Score.points_4m: case Points.points_4m:
return Assets.images.score.points4m.keyName; return Assets.images.score.points4m.keyName;
case Score.points_5m: case Points.points_5m:
return Assets.images.score.points5m.keyName; return Assets.images.score.points5m.keyName;
case Score.points_6m: case Points.points_6m:
return Assets.images.score.points6m.keyName; return Assets.images.score.points6m.keyName;
} }
} }

@ -69,7 +69,7 @@ class BackboardGameOverGame extends AssetsGame
onSubmit: (initials) { onSubmit: (initials) {
add( add(
components.ScoreComponent( components.ScoreComponent(
score: components.Score.values points: components.Points.values
.firstWhere((element) => element.value == score), .firstWhere((element) => element.value == score),
position: Vector2(0, 50), position: Vector2(0, 50),
), ),

@ -17,8 +17,8 @@ void addBackboardStories(Dashbook dashbook) {
gameBuilder: (context) => BackboardGameOverGame( gameBuilder: (context) => BackboardGameOverGame(
context.listProperty( context.listProperty(
'Score', 'Score',
Score.values.first.value, Points.values.first.value,
Score.values.map((score) => score.value).toList(), Points.values.map((score) => score.value).toList(),
), ),
context.listProperty( context.listProperty(
'Character', 'Character',

@ -8,14 +8,7 @@ class ScoreGame extends AssetsGame with TapDetector {
ScoreGame() ScoreGame()
: super( : super(
imagesFileNames: [ imagesFileNames: [
Assets.images.score.points1m.keyName,
Assets.images.score.points1m2.keyName,
Assets.images.score.points2m.keyName,
Assets.images.score.points3m.keyName,
Assets.images.score.points4m.keyName,
Assets.images.score.points5k.keyName, Assets.images.score.points5k.keyName,
Assets.images.score.points5m.keyName,
Assets.images.score.points6m.keyName,
Assets.images.score.points10k.keyName, Assets.images.score.points10k.keyName,
Assets.images.score.points15k.keyName, Assets.images.score.points15k.keyName,
Assets.images.score.points20k.keyName, Assets.images.score.points20k.keyName,
@ -31,6 +24,13 @@ class ScoreGame extends AssetsGame with TapDetector {
Assets.images.score.points400k.keyName, Assets.images.score.points400k.keyName,
Assets.images.score.points600k.keyName, Assets.images.score.points600k.keyName,
Assets.images.score.points800k.keyName, Assets.images.score.points800k.keyName,
Assets.images.score.points1m.keyName,
Assets.images.score.points1m2.keyName,
Assets.images.score.points2m.keyName,
Assets.images.score.points3m.keyName,
Assets.images.score.points4m.keyName,
Assets.images.score.points5m.keyName,
Assets.images.score.points6m.keyName,
], ],
); );
@ -50,12 +50,12 @@ class ScoreGame extends AssetsGame with TapDetector {
@override @override
void onTapUp(TapUpInfo info) { void onTapUp(TapUpInfo info) {
final index = random.nextInt(Score.values.length); final index = random.nextInt(Points.values.length);
final score = Score.values[index]; final score = Points.values[index];
add( add(
ScoreComponent( ScoreComponent(
score: score, points: score,
position: info.eventPosition.game..multiply(Vector2(1, -1)), position: info.eventPosition.game..multiply(Vector2(1, -1)),
), ),
); );

@ -9,16 +9,10 @@ import 'package:pinball_components/pinball_components.dart';
import '../../helpers/helpers.dart'; import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized();
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.score.points1m.keyName,
Assets.images.score.points1m2.keyName,
Assets.images.score.points2m.keyName,
Assets.images.score.points3m.keyName,
Assets.images.score.points4m.keyName,
Assets.images.score.points5k.keyName, Assets.images.score.points5k.keyName,
Assets.images.score.points5m.keyName,
Assets.images.score.points6m.keyName,
Assets.images.score.points10k.keyName, Assets.images.score.points10k.keyName,
Assets.images.score.points15k.keyName, Assets.images.score.points15k.keyName,
Assets.images.score.points20k.keyName, Assets.images.score.points20k.keyName,
@ -34,9 +28,46 @@ void main() {
Assets.images.score.points400k.keyName, Assets.images.score.points400k.keyName,
Assets.images.score.points600k.keyName, Assets.images.score.points600k.keyName,
Assets.images.score.points800k.keyName, Assets.images.score.points800k.keyName,
Assets.images.score.points1m.keyName,
Assets.images.score.points1m2.keyName,
Assets.images.score.points2m.keyName,
Assets.images.score.points3m.keyName,
Assets.images.score.points4m.keyName,
Assets.images.score.points5m.keyName,
Assets.images.score.points6m.keyName,
]; ];
final flameTester = FlameTester(() => TestGame(assets));
group('ScoreText', () { group('ScoreComponent', () {
group('renders correctly', () {
flameTester.testGameWidget(
'one million points',
setUp: (game, tester) async {
await game.images.loadAll(assets);
await game.ensureAdd(
ScoreComponent(
points: Points.points_1m,
position: Vector2.zero(),
),
);
game.camera
..followVector2(Vector2.zero())
..zoom = 8;
await tester.pump();
},
verify: (game, tester) async {
await expectLater(
find.byGame<TestGame>(),
matchesGoldenFile('golden/score/1m.png'),
);
},
);
});
});
group('Effects', () {
final flameTester = FlameTester(() => TestGame(assets)); final flameTester = FlameTester(() => TestGame(assets));
flameTester.testGameWidget( flameTester.testGameWidget(
@ -46,7 +77,7 @@ void main() {
game.camera.followVector2(Vector2.zero()); game.camera.followVector2(Vector2.zero());
await game.ensureAdd( await game.ensureAdd(
ScoreComponent( ScoreComponent(
score: Score.points_6m, points: Points.points_6m,
position: Vector2.zero(), position: Vector2.zero(),
), ),
); );
@ -64,7 +95,7 @@ void main() {
game.camera.followVector2(Vector2.zero()); game.camera.followVector2(Vector2.zero());
await game.ensureAdd( await game.ensureAdd(
ScoreComponent( ScoreComponent(
score: Score.points_6m, points: Points.points_6m,
position: Vector2.zero(), position: Vector2.zero(),
), ),
); );
@ -78,8 +109,6 @@ void main() {
}, },
); );
// TODO(ruimiguel): review why this test is failing after ScoreComponent
// refactor.
flameTester.testGameWidget( flameTester.testGameWidget(
'is removed once finished', 'is removed once finished',
setUp: (game, tester) async { setUp: (game, tester) async {
@ -87,13 +116,14 @@ void main() {
game.camera.followVector2(Vector2.zero()); game.camera.followVector2(Vector2.zero());
await game.ensureAdd( await game.ensureAdd(
ScoreComponent( ScoreComponent(
score: Score.points_6m, points: Points.points_6m,
position: Vector2.zero(), position: Vector2.zero(),
), ),
); );
game.update(1); game.update(1);
game.update(0); // Ensure all component removals game.update(0); // Ensure all component removals
await tester.pump();
}, },
verify: (game, tester) async { verify: (game, tester) async {
expect(game.children.length, equals(0)); expect(game.children.length, equals(0));

@ -83,7 +83,7 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'emits Scored event with points', 'emits Scored event with points',
setUp: (game, tester) async { setUp: (game, tester) async {
const points = Score.points_6m; const points = Points.points_6m;
final scoringBehavior = ScoringBehavior(points: points); final scoringBehavior = ScoringBehavior(points: points);
await parent.add(scoringBehavior); await parent.add(scoringBehavior);
await game.ensureAdd(parent); await game.ensureAdd(parent);
@ -102,7 +102,7 @@ void main() {
'plays score sound', 'plays score sound',
setUp: (game, tester) async { setUp: (game, tester) async {
const points = 20; const points = 20;
final scoringBehavior = ScoringBehavior(points: Score.points_6m); final scoringBehavior = ScoringBehavior(points: Points.points_6m);
await parent.add(scoringBehavior); await parent.add(scoringBehavior);
await game.ensureAdd(parent); await game.ensureAdd(parent);
@ -115,7 +115,7 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
"adds a ScoreText component at Ball's position with points", "adds a ScoreText component at Ball's position with points",
setUp: (game, tester) async { setUp: (game, tester) async {
const points = Score.points_6m; const points = Points.points_6m;
final scoringBehavior = ScoringBehavior(points: points); final scoringBehavior = ScoringBehavior(points: points);
await parent.add(scoringBehavior); await parent.add(scoringBehavior);
await game.ensureAdd(parent); await game.ensureAdd(parent);
@ -126,7 +126,7 @@ void main() {
final scoreText = game.descendants().whereType<ScoreComponent>(); final scoreText = game.descendants().whereType<ScoreComponent>();
expect(scoreText.length, equals(1)); expect(scoreText.length, equals(1));
expect( expect(
scoreText.first.score, scoreText.first.points,
equals(points), equals(points),
); );
expect( expect(

Loading…
Cancel
Save