From b5f2bedb0786db787322c3cb38fa98b8a816bbd9 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Sun, 1 May 2022 13:19:32 +0200 Subject: [PATCH] refactor: score enum to Points --- lib/game/components/android_acres.dart | 6 +- lib/game/components/bottom_group.dart | 2 +- .../flutter_forest/flutter_forest.dart | 8 +- .../components/google_word/google_word.dart | 12 +- lib/game/components/scoring_behavior.dart | 6 +- lib/game/components/sparky_scorch.dart | 8 +- .../lib/src/components/render_priority.dart | 6 +- .../lib/src/components/score_component.dart | 106 +++++++++--------- .../backboard/backboard_game_over_game.dart | 2 +- .../lib/stories/backboard/stories.dart | 4 +- .../sandbox/lib/stories/score/score_game.dart | 20 ++-- ...ts_test.dart => score_component_test.dart} | 56 ++++++--- .../components/scoring_behavior_test.dart | 8 +- 13 files changed, 137 insertions(+), 107 deletions(-) rename packages/pinball_components/test/src/components/{score_text_effects_test.dart => score_component_test.dart} (75%) diff --git a/lib/game/components/android_acres.dart b/lib/game/components/android_acres.dart index e27e2d6b..aef504cd 100644 --- a/lib/game/components/android_acres.dart +++ b/lib/game/components/android_acres.dart @@ -16,17 +16,17 @@ class AndroidAcres extends Blueprint { components: [ AndroidBumper.a( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-25, 1.3), AndroidBumper.b( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-32.8, -9.2), AndroidBumper.cow( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-20.5, -13.8), ], diff --git a/lib/game/components/bottom_group.dart b/lib/game/components/bottom_group.dart index cde83516..4f21463d 100644 --- a/lib/game/components/bottom_group.dart +++ b/lib/game/components/bottom_group.dart @@ -49,7 +49,7 @@ class _BottomGroupSide extends Component { final kicker = Kicker( side: _side, children: [ - ScoringBehavior(points: Score.points_5k), + ScoringBehavior(points: Points.points_5k), ], )..initialPosition = Vector2( (22.4 * direction) + centerXAdjustment, diff --git a/lib/game/components/flutter_forest/flutter_forest.dart b/lib/game/components/flutter_forest/flutter_forest.dart index cde66bee..67119575 100644 --- a/lib/game/components/flutter_forest/flutter_forest.dart +++ b/lib/game/components/flutter_forest/flutter_forest.dart @@ -18,22 +18,22 @@ class FlutterForest extends Component { children: [ Signpost( children: [ - ScoringBehavior(points: Score.points_5k), + ScoringBehavior(points: Points.points_5k), ], )..initialPosition = Vector2(8.35, -58.3), DashNestBumper.main( children: [ - ScoringBehavior(points: Score.points_200k), + ScoringBehavior(points: Points.points_200k), ], )..initialPosition = Vector2(18.55, -59.35), DashNestBumper.a( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(8.95, -51.95), DashNestBumper.b( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(23.3, -46.75), DashAnimatronic()..position = Vector2(20, -66), diff --git a/lib/game/components/google_word/google_word.dart b/lib/game/components/google_word/google_word.dart index a1244167..25b423a3 100644 --- a/lib/game/components/google_word/google_word.dart +++ b/lib/game/components/google_word/google_word.dart @@ -15,27 +15,27 @@ class GoogleWord extends Component { children: [ GoogleLetter( 0, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(-12.92, 1.82), GoogleLetter( 1, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(-8.33, -0.65), GoogleLetter( 2, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(-2.88, -1.75), GoogleLetter( 3, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(2.88, -1.75), GoogleLetter( 4, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(8.33, -0.65), GoogleLetter( 5, - children: [ScoringBehavior(points: Score.points_5k)], + children: [ScoringBehavior(points: Points.points_5k)], )..initialPosition = position + Vector2(12.92, 1.82), GoogleWordBonusBehavior(), ], diff --git a/lib/game/components/scoring_behavior.dart b/lib/game/components/scoring_behavior.dart index c20bd881..adbca2fe 100644 --- a/lib/game/components/scoring_behavior.dart +++ b/lib/game/components/scoring_behavior.dart @@ -12,10 +12,10 @@ import 'package:pinball_flame/pinball_flame.dart'; class ScoringBehavior extends ContactBehavior with HasGameRef { /// {@macro scoring_behavior} ScoringBehavior({ - required Score points, + required Points points, }) : _points = points; - final Score _points; + final Points _points; @override void beginContact(Object other, Contact contact) { @@ -26,7 +26,7 @@ class ScoringBehavior extends ContactBehavior with HasGameRef { gameRef.audio.score(); gameRef.add( ScoreComponent( - score: _points, + points: _points, position: other.body.position, ), ); diff --git a/lib/game/components/sparky_scorch.dart b/lib/game/components/sparky_scorch.dart index 7bcb5a85..6cd76730 100644 --- a/lib/game/components/sparky_scorch.dart +++ b/lib/game/components/sparky_scorch.dart @@ -16,17 +16,17 @@ class SparkyScorch extends Blueprint { components: [ SparkyBumper.a( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-22.9, -41.65), SparkyBumper.b( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-21.25, -57.9), SparkyBumper.c( children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], )..initialPosition = Vector2(-3.3, -52.55), SparkyComputerSensor()..initialPosition = Vector2(-13, -49.8), @@ -49,7 +49,7 @@ class SparkyComputerSensor extends BodyComponent : super( renderBody: false, children: [ - ScoringBehavior(points: Score.points_20k), + ScoringBehavior(points: Points.points_20k), ], ); diff --git a/packages/pinball_components/lib/src/components/render_priority.dart b/packages/pinball_components/lib/src/components/render_priority.dart index b11a5209..d270a70c 100644 --- a/packages/pinball_components/lib/src/components/render_priority.dart +++ b/packages/pinball_components/lib/src/components/render_priority.dart @@ -110,10 +110,10 @@ abstract class RenderPriority { static const int androidBumper = _above + ballOnBoard; - // Score Text + // Score - static const int scoreText = _above + spaceshipRampForegroundRailing; + static const int score = _above + spaceshipRampForegroundRailing; // Debug information - static const int debugInfo = _above + scoreText; + static const int debugInfo = _above + score; } diff --git a/packages/pinball_components/lib/src/components/score_component.dart b/packages/pinball_components/lib/src/components/score_component.dart index d654761b..e12a71fa 100644 --- a/packages/pinball_components/lib/src/components/score_component.dart +++ b/packages/pinball_components/lib/src/components/score_component.dart @@ -6,7 +6,7 @@ import 'package:flame/components.dart'; import 'package:flame/effects.dart'; import 'package:pinball_components/pinball_components.dart'; -enum Score { +enum Points { points_5k, points_10k, points_15k, @@ -39,23 +39,23 @@ enum Score { class ScoreComponent extends SpriteComponent with HasGameRef { /// {@macro score_component} ScoreComponent({ - required this.score, + required this.points, required Vector2 position, }) : super( position: position, anchor: Anchor.center, - priority: RenderPriority.scoreText, + priority: RenderPriority.score, ); late final Effect _effect; - late Score score; + late Points points; @override Future onLoad() async { await super.onLoad(); final sprite = Sprite( - gameRef.images.fromCache(score.asset), + gameRef.images.fromCache(points.asset), ); this.sprite = sprite; 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 { switch (this) { - case Score.points_5k: + case Points.points_5k: return 5000; - case Score.points_10k: + case Points.points_10k: return 10000; - case Score.points_15k: + case Points.points_15k: return 15000; - case Score.points_20k: + case Points.points_20k: return 20000; - case Score.points_25k: + case Points.points_25k: return 25000; - case Score.points_30k: + case Points.points_30k: return 30000; - case Score.points_40k: + case Points.points_40k: return 40000; - case Score.points_50k: + case Points.points_50k: return 50000; - case Score.points_60k: + case Points.points_60k: return 60000; - case Score.points_80k: + case Points.points_80k: return 80000; - case Score.points_100k: + case Points.points_100k: return 100000; - case Score.points_120k: + case Points.points_120k: return 120000; - case Score.points_200k: + case Points.points_200k: return 200000; - case Score.points_400k: + case Points.points_400k: return 400000; - case Score.points_600k: + case Points.points_600k: return 600000; - case Score.points_800k: + case Points.points_800k: return 800000; - case Score.points_1m: + case Points.points_1m: return 1000000; - case Score.points_1m2: + case Points.points_1m2: return 1200000; - case Score.points_2m: + case Points.points_2m: return 2000000; - case Score.points_3m: + case Points.points_3m: return 3000000; - case Score.points_4m: + case Points.points_4m: return 4000000; - case Score.points_5m: + case Points.points_5m: return 5000000; - case Score.points_6m: + case Points.points_6m: return 6000000; } } } -extension on Score { +extension on Points { String get asset { switch (this) { - case Score.points_5k: + case Points.points_5k: return Assets.images.score.points5k.keyName; - case Score.points_10k: + case Points.points_10k: return Assets.images.score.points10k.keyName; - case Score.points_15k: + case Points.points_15k: return Assets.images.score.points15k.keyName; - case Score.points_20k: + case Points.points_20k: return Assets.images.score.points20k.keyName; - case Score.points_25k: + case Points.points_25k: return Assets.images.score.points25k.keyName; - case Score.points_30k: + case Points.points_30k: return Assets.images.score.points30k.keyName; - case Score.points_40k: + case Points.points_40k: return Assets.images.score.points40k.keyName; - case Score.points_50k: + case Points.points_50k: return Assets.images.score.points50k.keyName; - case Score.points_60k: + case Points.points_60k: return Assets.images.score.points60k.keyName; - case Score.points_80k: + case Points.points_80k: return Assets.images.score.points80k.keyName; - case Score.points_100k: + case Points.points_100k: return Assets.images.score.points100k.keyName; - case Score.points_120k: + case Points.points_120k: return Assets.images.score.points120k.keyName; - case Score.points_200k: + case Points.points_200k: return Assets.images.score.points200k.keyName; - case Score.points_400k: + case Points.points_400k: return Assets.images.score.points400k.keyName; - case Score.points_600k: + case Points.points_600k: return Assets.images.score.points600k.keyName; - case Score.points_800k: + case Points.points_800k: return Assets.images.score.points800k.keyName; - case Score.points_1m: + case Points.points_1m: return Assets.images.score.points1m.keyName; - case Score.points_1m2: + case Points.points_1m2: return Assets.images.score.points1m2.keyName; - case Score.points_2m: + case Points.points_2m: return Assets.images.score.points2m.keyName; - case Score.points_3m: + case Points.points_3m: return Assets.images.score.points3m.keyName; - case Score.points_4m: + case Points.points_4m: return Assets.images.score.points4m.keyName; - case Score.points_5m: + case Points.points_5m: return Assets.images.score.points5m.keyName; - case Score.points_6m: + case Points.points_6m: return Assets.images.score.points6m.keyName; } } diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart index 426ea2f4..4f7c904c 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart @@ -69,7 +69,7 @@ class BackboardGameOverGame extends AssetsGame onSubmit: (initials) { add( components.ScoreComponent( - score: components.Score.values + points: components.Points.values .firstWhere((element) => element.value == score), position: Vector2(0, 50), ), diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart index cc5576ee..9e83c7c4 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart @@ -17,8 +17,8 @@ void addBackboardStories(Dashbook dashbook) { gameBuilder: (context) => BackboardGameOverGame( context.listProperty( 'Score', - Score.values.first.value, - Score.values.map((score) => score.value).toList(), + Points.values.first.value, + Points.values.map((score) => score.value).toList(), ), context.listProperty( 'Character', diff --git a/packages/pinball_components/sandbox/lib/stories/score/score_game.dart b/packages/pinball_components/sandbox/lib/stories/score/score_game.dart index bcc6cdd8..ddbe0424 100644 --- a/packages/pinball_components/sandbox/lib/stories/score/score_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/score/score_game.dart @@ -8,14 +8,7 @@ class ScoreGame extends AssetsGame with TapDetector { ScoreGame() : super( 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.points5m.keyName, - Assets.images.score.points6m.keyName, Assets.images.score.points10k.keyName, Assets.images.score.points15k.keyName, Assets.images.score.points20k.keyName, @@ -31,6 +24,13 @@ class ScoreGame extends AssetsGame with TapDetector { Assets.images.score.points400k.keyName, Assets.images.score.points600k.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 void onTapUp(TapUpInfo info) { - final index = random.nextInt(Score.values.length); - final score = Score.values[index]; + final index = random.nextInt(Points.values.length); + final score = Points.values[index]; add( ScoreComponent( - score: score, + points: score, position: info.eventPosition.game..multiply(Vector2(1, -1)), ), ); diff --git a/packages/pinball_components/test/src/components/score_text_effects_test.dart b/packages/pinball_components/test/src/components/score_component_test.dart similarity index 75% rename from packages/pinball_components/test/src/components/score_text_effects_test.dart rename to packages/pinball_components/test/src/components/score_component_test.dart index 7f7d9756..0e6aba95 100644 --- a/packages/pinball_components/test/src/components/score_text_effects_test.dart +++ b/packages/pinball_components/test/src/components/score_component_test.dart @@ -9,16 +9,10 @@ import 'package:pinball_components/pinball_components.dart'; import '../../helpers/helpers.dart'; void main() { + TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized(); 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.points5m.keyName, - Assets.images.score.points6m.keyName, Assets.images.score.points10k.keyName, Assets.images.score.points15k.keyName, Assets.images.score.points20k.keyName, @@ -34,9 +28,46 @@ void main() { Assets.images.score.points400k.keyName, Assets.images.score.points600k.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(), + matchesGoldenFile('golden/score/1m.png'), + ); + }, + ); + }); + }); + + group('Effects', () { final flameTester = FlameTester(() => TestGame(assets)); flameTester.testGameWidget( @@ -46,7 +77,7 @@ void main() { game.camera.followVector2(Vector2.zero()); await game.ensureAdd( ScoreComponent( - score: Score.points_6m, + points: Points.points_6m, position: Vector2.zero(), ), ); @@ -64,7 +95,7 @@ void main() { game.camera.followVector2(Vector2.zero()); await game.ensureAdd( ScoreComponent( - score: Score.points_6m, + points: Points.points_6m, position: Vector2.zero(), ), ); @@ -78,8 +109,6 @@ void main() { }, ); - // TODO(ruimiguel): review why this test is failing after ScoreComponent - // refactor. flameTester.testGameWidget( 'is removed once finished', setUp: (game, tester) async { @@ -87,13 +116,14 @@ void main() { game.camera.followVector2(Vector2.zero()); await game.ensureAdd( ScoreComponent( - score: Score.points_6m, + points: Points.points_6m, position: Vector2.zero(), ), ); game.update(1); game.update(0); // Ensure all component removals + await tester.pump(); }, verify: (game, tester) async { expect(game.children.length, equals(0)); diff --git a/test/game/components/scoring_behavior_test.dart b/test/game/components/scoring_behavior_test.dart index 9387af5e..54f5e5ab 100644 --- a/test/game/components/scoring_behavior_test.dart +++ b/test/game/components/scoring_behavior_test.dart @@ -83,7 +83,7 @@ void main() { flameBlocTester.testGameWidget( 'emits Scored event with points', setUp: (game, tester) async { - const points = Score.points_6m; + const points = Points.points_6m; final scoringBehavior = ScoringBehavior(points: points); await parent.add(scoringBehavior); await game.ensureAdd(parent); @@ -102,7 +102,7 @@ void main() { 'plays score sound', setUp: (game, tester) async { const points = 20; - final scoringBehavior = ScoringBehavior(points: Score.points_6m); + final scoringBehavior = ScoringBehavior(points: Points.points_6m); await parent.add(scoringBehavior); await game.ensureAdd(parent); @@ -115,7 +115,7 @@ void main() { flameBlocTester.testGameWidget( "adds a ScoreText component at Ball's position with points", setUp: (game, tester) async { - const points = Score.points_6m; + const points = Points.points_6m; final scoringBehavior = ScoringBehavior(points: points); await parent.add(scoringBehavior); await game.ensureAdd(parent); @@ -126,7 +126,7 @@ void main() { final scoreText = game.descendants().whereType(); expect(scoreText.length, equals(1)); expect( - scoreText.first.score, + scoreText.first.points, equals(points), ); expect(