diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 1bac998a..55a6b23a 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flame/components.dart'; +import 'package:flame/game.dart'; import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; @@ -134,7 +135,7 @@ class _GameBallsController extends ComponentController } } -class DebugPinballGame extends PinballGame with TapDetector { +class DebugPinballGame extends PinballGame with FPSCounter, TapDetector { DebugPinballGame({ required PinballTheme theme, required PinballAudio audio, @@ -149,6 +150,7 @@ class DebugPinballGame extends PinballGame with TapDetector { Future onLoad() async { await super.onLoad(); await _loadBackground(); + await add(_DebugInformation()); } // TODO(alestiago): Move to PinballGame once we have the real background @@ -191,3 +193,35 @@ class _DebugGameBallsController extends _GameBallsController { return noBallsLeft && canBallRespawn; } } + +class _DebugInformation extends Component with HasGameRef { + _DebugInformation() : super(priority: RenderPriority.debugInfo); + + @override + PositionType get positionType => PositionType.widget; + + final _debugTextPaint = TextPaint( + style: const TextStyle( + color: Colors.green, + fontSize: 10, + ), + ); + + final _debugBackgroundPaint = Paint()..color = Colors.white; + + @override + void render(Canvas canvas) { + final debugText = [ + 'FPS: ${gameRef.fps().toStringAsFixed(1)}', + 'BALLS: ${gameRef.descendants().whereType().length}', + ].join(' | '); + + final height = _debugTextPaint.measureTextHeight(debugText); + final position = Vector2(0, gameRef.camera.canvasSize.y - height); + canvas.drawRect( + position & Vector2(gameRef.camera.canvasSize.x, height), + _debugBackgroundPaint, + ); + _debugTextPaint.render(canvas, debugText, position); + } +} diff --git a/lib/leaderboard/models/leader_board_entry.dart b/lib/leaderboard/models/leader_board_entry.dart index cfd5ffd4..a86975dd 100644 --- a/lib/leaderboard/models/leader_board_entry.dart +++ b/lib/leaderboard/models/leader_board_entry.dart @@ -36,7 +36,7 @@ extension LeaderboardEntryDataX on LeaderboardEntryData { rank: position.toString(), playerInitials: playerInitials, score: score, - character: character.toTheme.character, + character: character.toTheme.leaderboardIcon, ); } } diff --git a/lib/theme/view/character_selection_page.dart b/lib/theme/view/character_selection_page.dart index 22aaee22..ef37270b 100644 --- a/lib/theme/view/character_selection_page.dart +++ b/lib/theme/view/character_selection_page.dart @@ -124,7 +124,7 @@ class CharacterImageButton extends StatelessWidget { ), child: Padding( padding: const EdgeInsets.all(8), - child: characterTheme.character.image(), + child: characterTheme.icon.image(), ), ), ); diff --git a/packages/pinball_components/lib/src/components/render_priority.dart b/packages/pinball_components/lib/src/components/render_priority.dart index 43c36ebf..d2438db9 100644 --- a/packages/pinball_components/lib/src/components/render_priority.dart +++ b/packages/pinball_components/lib/src/components/render_priority.dart @@ -115,4 +115,7 @@ abstract class RenderPriority { // Score Text static const int scoreText = _above + spaceshipRampForegroundRailing; + + // Debug information + static const int debugInfo = _above + scoreText; } diff --git a/packages/pinball_theme/assets/images/android/animation.png b/packages/pinball_theme/assets/images/android/animation.png new file mode 100644 index 00000000..fc7465be Binary files /dev/null and b/packages/pinball_theme/assets/images/android/animation.png differ diff --git a/packages/pinball_theme/assets/images/android/character.png b/packages/pinball_theme/assets/images/android/character.png deleted file mode 100644 index 736f1e6f..00000000 Binary files a/packages/pinball_theme/assets/images/android/character.png and /dev/null differ diff --git a/packages/pinball_theme/assets/images/dash/animation.png b/packages/pinball_theme/assets/images/dash/animation.png new file mode 100644 index 00000000..e812415f Binary files /dev/null and b/packages/pinball_theme/assets/images/dash/animation.png differ diff --git a/packages/pinball_theme/assets/images/dash/character.png b/packages/pinball_theme/assets/images/dash/character.png deleted file mode 100644 index d76795aa..00000000 Binary files a/packages/pinball_theme/assets/images/dash/character.png and /dev/null differ diff --git a/packages/pinball_theme/assets/images/dino/animation.png b/packages/pinball_theme/assets/images/dino/animation.png new file mode 100644 index 00000000..c75b16f9 Binary files /dev/null and b/packages/pinball_theme/assets/images/dino/animation.png differ diff --git a/packages/pinball_theme/assets/images/dino/character.png b/packages/pinball_theme/assets/images/dino/character.png deleted file mode 100644 index c6f5a390..00000000 Binary files a/packages/pinball_theme/assets/images/dino/character.png and /dev/null differ diff --git a/packages/pinball_theme/assets/images/sparky/animation.png b/packages/pinball_theme/assets/images/sparky/animation.png new file mode 100644 index 00000000..1aff4772 Binary files /dev/null and b/packages/pinball_theme/assets/images/sparky/animation.png differ diff --git a/packages/pinball_theme/assets/images/sparky/character.png b/packages/pinball_theme/assets/images/sparky/character.png deleted file mode 100644 index c37403b3..00000000 Binary files a/packages/pinball_theme/assets/images/sparky/character.png and /dev/null differ diff --git a/packages/pinball_theme/lib/src/generated/assets.gen.dart b/packages/pinball_theme/lib/src/generated/assets.gen.dart index f050c621..3feeecce 100644 --- a/packages/pinball_theme/lib/src/generated/assets.gen.dart +++ b/packages/pinball_theme/lib/src/generated/assets.gen.dart @@ -28,6 +28,10 @@ class $AssetsImagesGen { class $AssetsImagesAndroidGen { const $AssetsImagesAndroidGen(); + /// File path: assets/images/android/animation.png + AssetGenImage get animation => + const AssetGenImage('assets/images/android/animation.png'); + /// File path: assets/images/android/background.png AssetGenImage get background => const AssetGenImage('assets/images/android/background.png'); @@ -48,6 +52,10 @@ class $AssetsImagesAndroidGen { class $AssetsImagesDashGen { const $AssetsImagesDashGen(); + /// File path: assets/images/dash/animation.png + AssetGenImage get animation => + const AssetGenImage('assets/images/dash/animation.png'); + /// File path: assets/images/dash/background.png AssetGenImage get background => const AssetGenImage('assets/images/dash/background.png'); @@ -67,6 +75,10 @@ class $AssetsImagesDashGen { class $AssetsImagesDinoGen { const $AssetsImagesDinoGen(); + /// File path: assets/images/dino/animation.png + AssetGenImage get animation => + const AssetGenImage('assets/images/dino/animation.png'); + /// File path: assets/images/dino/background.png AssetGenImage get background => const AssetGenImage('assets/images/dino/background.png'); @@ -86,6 +98,10 @@ class $AssetsImagesDinoGen { class $AssetsImagesSparkyGen { const $AssetsImagesSparkyGen(); + /// File path: assets/images/sparky/animation.png + AssetGenImage get animation => + const AssetGenImage('assets/images/sparky/animation.png'); + /// File path: assets/images/sparky/background.png AssetGenImage get background => const AssetGenImage('assets/images/sparky/background.png'); diff --git a/packages/pinball_theme/lib/src/themes/android_theme.dart b/packages/pinball_theme/lib/src/themes/android_theme.dart index 1001ca5f..8989c717 100644 --- a/packages/pinball_theme/lib/src/themes/android_theme.dart +++ b/packages/pinball_theme/lib/src/themes/android_theme.dart @@ -14,9 +14,6 @@ class AndroidTheme extends CharacterTheme { @override Color get ballColor => Colors.green; - @override - AssetGenImage get character => Assets.images.android.character; - @override AssetGenImage get background => Assets.images.android.background; @@ -25,4 +22,7 @@ class AndroidTheme extends CharacterTheme { @override AssetGenImage get leaderboardIcon => Assets.images.android.leaderboardIcon; + + @override + AssetGenImage get animation => Assets.images.android.animation; } diff --git a/packages/pinball_theme/lib/src/themes/character_theme.dart b/packages/pinball_theme/lib/src/themes/character_theme.dart index 9c5f6ba6..072c917f 100644 --- a/packages/pinball_theme/lib/src/themes/character_theme.dart +++ b/packages/pinball_theme/lib/src/themes/character_theme.dart @@ -18,9 +18,6 @@ abstract class CharacterTheme extends Equatable { /// Ball color for this theme. Color get ballColor; - /// Asset for the theme character. - AssetGenImage get character; - /// Asset for the background. AssetGenImage get background; @@ -30,13 +27,16 @@ abstract class CharacterTheme extends Equatable { /// Icon asset for the leaderboard. AssetGenImage get leaderboardIcon; + /// Asset for the the idle character animation. + AssetGenImage get animation; + @override List get props => [ name, ballColor, - character, background, icon, leaderboardIcon, + animation, ]; } diff --git a/packages/pinball_theme/lib/src/themes/dash_theme.dart b/packages/pinball_theme/lib/src/themes/dash_theme.dart index 9038f2fc..7584c8ed 100644 --- a/packages/pinball_theme/lib/src/themes/dash_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dash_theme.dart @@ -14,9 +14,6 @@ class DashTheme extends CharacterTheme { @override Color get ballColor => Colors.blue; - @override - AssetGenImage get character => Assets.images.dash.character; - @override AssetGenImage get background => Assets.images.dash.background; @@ -25,4 +22,7 @@ class DashTheme extends CharacterTheme { @override AssetGenImage get leaderboardIcon => Assets.images.dash.leaderboardIcon; + + @override + AssetGenImage get animation => Assets.images.dash.animation; } diff --git a/packages/pinball_theme/lib/src/themes/dino_theme.dart b/packages/pinball_theme/lib/src/themes/dino_theme.dart index b434463e..3baf466c 100644 --- a/packages/pinball_theme/lib/src/themes/dino_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dino_theme.dart @@ -14,9 +14,6 @@ class DinoTheme extends CharacterTheme { @override Color get ballColor => Colors.grey; - @override - AssetGenImage get character => Assets.images.dino.character; - @override AssetGenImage get background => Assets.images.dino.background; @@ -25,4 +22,7 @@ class DinoTheme extends CharacterTheme { @override AssetGenImage get leaderboardIcon => Assets.images.dino.leaderboardIcon; + + @override + AssetGenImage get animation => Assets.images.dino.animation; } diff --git a/packages/pinball_theme/lib/src/themes/sparky_theme.dart b/packages/pinball_theme/lib/src/themes/sparky_theme.dart index 9e71bef8..7884a22f 100644 --- a/packages/pinball_theme/lib/src/themes/sparky_theme.dart +++ b/packages/pinball_theme/lib/src/themes/sparky_theme.dart @@ -14,9 +14,6 @@ class SparkyTheme extends CharacterTheme { @override String get name => 'Sparky'; - @override - AssetGenImage get character => Assets.images.sparky.character; - @override AssetGenImage get background => Assets.images.sparky.background; @@ -25,4 +22,7 @@ class SparkyTheme extends CharacterTheme { @override AssetGenImage get leaderboardIcon => Assets.images.sparky.leaderboardIcon; + + @override + AssetGenImage get animation => Assets.images.sparky.animation; } diff --git a/test/leaderboard/bloc/leaderboard_state_test.dart b/test/leaderboard/bloc/leaderboard_state_test.dart index ec455f1f..1b5d41d9 100644 --- a/test/leaderboard/bloc/leaderboard_state_test.dart +++ b/test/leaderboard/bloc/leaderboard_state_test.dart @@ -30,7 +30,7 @@ void main() { rank: '1', playerInitials: 'ABC', score: 1500, - character: DashTheme().character, + character: DashTheme().leaderboardIcon, ); test( diff --git a/test/leaderboard/view/leaderboard_page_test.dart b/test/leaderboard/view/leaderboard_page_test.dart index b17c27b8..daacb4a7 100644 --- a/test/leaderboard/view/leaderboard_page_test.dart +++ b/test/leaderboard/view/leaderboard_page_test.dart @@ -121,7 +121,7 @@ void main() { rank: '1', playerInitials: 'ABC', score: 10000, - character: DashTheme().character, + character: DashTheme().leaderboardIcon, ), ], ),