|
|
@ -1,21 +1,99 @@
|
|
|
|
|
|
|
|
// ignore_for_file: public_member_api_docs
|
|
|
|
|
|
|
|
|
|
|
|
import 'dart:async';
|
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:flame/components.dart';
|
|
|
|
import 'package:flame/components.dart';
|
|
|
|
import 'package:flame/effects.dart';
|
|
|
|
import 'package:flame/effects.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
import 'package:pinball_components/pinball_components.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}
|
|
|
|
/// {@template score_text}
|
|
|
|
/// A [TextComponent] that spawns at a given [position] with a moving animation.
|
|
|
|
/// A [TextComponent] that spawns at a given [position] with a moving animation.
|
|
|
|
/// {@endtemplate}
|
|
|
|
/// {@endtemplate}
|
|
|
|
class ScoreText extends TextComponent {
|
|
|
|
class ScoreText extends SpriteComponent with HasGameRef {
|
|
|
|
/// {@macro score_text}
|
|
|
|
/// {@macro score_text}
|
|
|
|
ScoreText({
|
|
|
|
ScoreText({
|
|
|
|
required String text,
|
|
|
|
required this.score,
|
|
|
|
required Vector2 position,
|
|
|
|
required Vector2 position,
|
|
|
|
this.color = Colors.black,
|
|
|
|
|
|
|
|
}) : super(
|
|
|
|
}) : super(
|
|
|
|
text: text,
|
|
|
|
|
|
|
|
position: position,
|
|
|
|
position: position,
|
|
|
|
anchor: Anchor.center,
|
|
|
|
anchor: Anchor.center,
|
|
|
|
priority: RenderPriority.scoreText,
|
|
|
|
priority: RenderPriority.scoreText,
|
|
|
@ -23,18 +101,16 @@ class ScoreText extends TextComponent {
|
|
|
|
|
|
|
|
|
|
|
|
late final Effect _effect;
|
|
|
|
late final Effect _effect;
|
|
|
|
|
|
|
|
|
|
|
|
/// The [text]'s [Color].
|
|
|
|
late Score score;
|
|
|
|
final Color color;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Future<void> onLoad() async {
|
|
|
|
Future<void> onLoad() async {
|
|
|
|
textRenderer = TextPaint(
|
|
|
|
await super.onLoad();
|
|
|
|
style: TextStyle(
|
|
|
|
final sprite = Sprite(
|
|
|
|
fontFamily: PinballFonts.pixeloidMono,
|
|
|
|
gameRef.images.fromCache(score.asset),
|
|
|
|
color: color,
|
|
|
|
|
|
|
|
fontSize: 4,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
this.sprite = sprite;
|
|
|
|
|
|
|
|
size = sprite.originalSize / 55;
|
|
|
|
|
|
|
|
|
|
|
|
await add(
|
|
|
|
await add(
|
|
|
|
_effect = MoveEffect.by(
|
|
|
|
_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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|