From 4940afe62bc358c2fd5484ea1cb13b752bf862df Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Sat, 30 Apr 2022 22:21:41 +0200 Subject: [PATCH] refactor: modified scoretext component to show sprite with the score --- .../lib/src/components/score_text.dart | 155 ++++++++++++++++-- 1 file changed, 142 insertions(+), 13 deletions(-) diff --git a/packages/pinball_components/lib/src/components/score_text.dart b/packages/pinball_components/lib/src/components/score_text.dart index a81b4a6f..9fca353f 100644 --- a/packages/pinball_components/lib/src/components/score_text.dart +++ b/packages/pinball_components/lib/src/components/score_text.dart @@ -1,21 +1,99 @@ +// ignore_for_file: public_member_api_docs + import 'dart:async'; import 'package:flame/components.dart'; import 'package:flame/effects.dart'; -import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; +enum Score { + points_5k, + points_10k, + points_15k, + points_20k, + points_25k, + points_30k, + points_40k, + points_50k, + points_60k, + points_80k, + points_100k, + points_120k, + points_200k, + points_400k, + points_600k, + points_800k, + points_1m, + points_1m2, + points_2m, + points_3m, + points_4m, + points_5m, + points_6m, +} + +extension ScoredX on Score { + int get value { + switch (this) { + case Score.points_5k: + return 5000; + case Score.points_10k: + return 10000; + case Score.points_15k: + return 15000; + case Score.points_20k: + return 20000; + case Score.points_25k: + return 25000; + case Score.points_30k: + return 30000; + case Score.points_40k: + return 40000; + case Score.points_50k: + return 50000; + case Score.points_60k: + return 60000; + case Score.points_80k: + return 80000; + case Score.points_100k: + return 100000; + case Score.points_120k: + return 120000; + case Score.points_200k: + return 200000; + case Score.points_400k: + return 400000; + case Score.points_600k: + return 600000; + case Score.points_800k: + return 800000; + case Score.points_1m: + return 1000000; + case Score.points_1m2: + return 1200000; + case Score.points_2m: + return 2000000; + case Score.points_3m: + return 3000000; + case Score.points_4m: + return 4000000; + case Score.points_5m: + return 5000000; + case Score.points_6m: + return 6000000; + } + } +} + /// {@template score_text} /// A [TextComponent] that spawns at a given [position] with a moving animation. /// {@endtemplate} -class ScoreText extends TextComponent { +class ScoreText extends SpriteComponent with HasGameRef { /// {@macro score_text} ScoreText({ - required String text, + required this.score, required Vector2 position, - this.color = Colors.black, }) : super( - text: text, position: position, anchor: Anchor.center, priority: RenderPriority.scoreText, @@ -23,18 +101,16 @@ class ScoreText extends TextComponent { late final Effect _effect; - /// The [text]'s [Color]. - final Color color; + late Score score; @override Future onLoad() async { - textRenderer = TextPaint( - style: TextStyle( - fontFamily: PinballFonts.pixeloidMono, - color: color, - fontSize: 4, - ), + await super.onLoad(); + final sprite = Sprite( + gameRef.images.fromCache(score.asset), ); + this.sprite = sprite; + size = sprite.originalSize / 55; await add( _effect = MoveEffect.by( @@ -53,3 +129,56 @@ class ScoreText extends TextComponent { } } } + +extension on Score { + String get asset { + switch (this) { + case Score.points_5k: + return Assets.images.score.points5k.keyName; + case Score.points_10k: + return Assets.images.score.points10k.keyName; + case Score.points_15k: + return Assets.images.score.points15k.keyName; + case Score.points_20k: + return Assets.images.score.points20k.keyName; + case Score.points_25k: + return Assets.images.score.points25k.keyName; + case Score.points_30k: + return Assets.images.score.points30k.keyName; + case Score.points_40k: + return Assets.images.score.points40k.keyName; + case Score.points_50k: + return Assets.images.score.points50k.keyName; + case Score.points_60k: + return Assets.images.score.points60k.keyName; + case Score.points_80k: + return Assets.images.score.points80k.keyName; + case Score.points_100k: + return Assets.images.score.points100k.keyName; + case Score.points_120k: + return Assets.images.score.points120k.keyName; + case Score.points_200k: + return Assets.images.score.points200k.keyName; + case Score.points_400k: + return Assets.images.score.points400k.keyName; + case Score.points_600k: + return Assets.images.score.points600k.keyName; + case Score.points_800k: + return Assets.images.score.points800k.keyName; + case Score.points_1m: + return Assets.images.score.points1m.keyName; + case Score.points_1m2: + return Assets.images.score.points1m2.keyName; + case Score.points_2m: + return Assets.images.score.points2m.keyName; + case Score.points_3m: + return Assets.images.score.points3m.keyName; + case Score.points_4m: + return Assets.images.score.points4m.keyName; + case Score.points_5m: + return Assets.images.score.points5m.keyName; + case Score.points_6m: + return Assets.images.score.points6m.keyName; + } + } +}