diff --git a/packages/pinball_components/lib/gen/pinball_fonts.dart b/packages/pinball_components/lib/gen/pinball_fonts.dart index 59dcaa6e..de6c5782 100644 --- a/packages/pinball_components/lib/gen/pinball_fonts.dart +++ b/packages/pinball_components/lib/gen/pinball_fonts.dart @@ -1,6 +1,6 @@ import 'package:pinball_components/gen/fonts.gen.dart'; -const String _fontPath = 'packages/pinball_components/'; +const String _fontPath = 'packages/pinball_components'; /// Class with the fonts available on the pinball game class PinballFonts { diff --git a/packages/pinball_components/lib/src/components/backboard/backboard_game_over.dart b/packages/pinball_components/lib/src/components/backboard/backboard_game_over.dart index 515f0de1..71e4a622 100644 --- a/packages/pinball_components/lib/src/components/backboard/backboard_game_over.dart +++ b/packages/pinball_components/lib/src/components/backboard/backboard_game_over.dart @@ -21,92 +21,39 @@ class BackboardGameOver extends PositionComponent with HasGameRef { required int score, required String characterIconPath, BackboardOnSubmit? onSubmit, - }) : _score = score, - _characterIconPath = characterIconPath, - _onSubmit = onSubmit; + }) : _onSubmit = onSubmit, + super( + children: [ + _BackboardSpriteComponent(), + _BackboardDisplaySpriteComponent(), + _ScoreTextComponent(score.formatScore()), + _CharacterIconSpriteComponent(characterIconPath), + ], + ); - final int _score; - final String _characterIconPath; final BackboardOnSubmit? _onSubmit; @override Future onLoad() async { - final backgroundSprite = await gameRef.loadSprite( - Assets.images.backboard.backboardGameOver.keyName, - ); - unawaited( - add( - SpriteComponent( - sprite: backgroundSprite, - size: backgroundSprite.originalSize / 10, - anchor: Anchor.bottomCenter, - ), - ), - ); - - final displaySprite = await gameRef.loadSprite( - Assets.images.backboard.display.keyName, - ); - unawaited( - add( - SpriteComponent( - sprite: displaySprite, - size: displaySprite.originalSize / 10, - anchor: Anchor.bottomCenter, - position: Vector2(0, -11.5), - ), - ), - ); - - unawaited( - add( - TextComponent( - text: _score.formatScore(), - position: Vector2(-34, -45), - anchor: Anchor.centerLeft, - textRenderer: Backboard.textPaint, - ), - ), - ); - - final characterIconSprite = await Sprite.load( - _characterIconPath, - images: Images(prefix: ''), - ); - unawaited( - add( - SpriteComponent( - sprite: characterIconSprite, - size: characterIconSprite.originalSize / 10, - anchor: Anchor.center, - position: Vector2(18.4, -45), - ), - ), - ); - for (var i = 0; i < 3; i++) { - unawaited( - add( - BackboardLetterPrompt( - position: Vector2( - 24.3 + (4.5 * i), - -45, - ), - hasFocus: i == 0, + await add( + BackboardLetterPrompt( + position: Vector2( + 24.3 + (4.5 * i), + -45, ), + hasFocus: i == 0, ), ); } - unawaited( - add( - KeyboardInputController( - keyUp: { - LogicalKeyboardKey.arrowLeft: () => _movePrompt(true), - LogicalKeyboardKey.arrowRight: () => _movePrompt(false), - LogicalKeyboardKey.enter: _submit, - }, - ), + await add( + KeyboardInputController( + keyUp: { + LogicalKeyboardKey.arrowLeft: () => _movePrompt(true), + LogicalKeyboardKey.arrowRight: () => _movePrompt(false), + LogicalKeyboardKey.enter: _submit, + }, ), ); } @@ -135,3 +82,67 @@ class BackboardGameOver extends PositionComponent with HasGameRef { return false; } } + +class _BackboardSpriteComponent extends SpriteComponent with HasGameRef { + _BackboardSpriteComponent() : super(anchor: Anchor.bottomCenter); + + @override + Future onLoad() async { + await super.onLoad(); + final sprite = await gameRef.loadSprite( + Assets.images.backboard.backboardGameOver.keyName, + ); + this.sprite = sprite; + size = sprite.originalSize / 10; + } +} + +class _BackboardDisplaySpriteComponent extends SpriteComponent with HasGameRef { + _BackboardDisplaySpriteComponent() + : super( + anchor: Anchor.bottomCenter, + position: Vector2(0, -11.5), + ); + + @override + Future onLoad() async { + await super.onLoad(); + final sprite = await gameRef.loadSprite( + Assets.images.backboard.display.keyName, + ); + this.sprite = sprite; + size = sprite.originalSize / 10; + } +} + +class _ScoreTextComponent extends TextComponent { + _ScoreTextComponent(String score) + : super( + text: score, + anchor: Anchor.centerLeft, + position: Vector2(-34, -45), + textRenderer: Backboard.textPaint, + ); +} + +class _CharacterIconSpriteComponent extends SpriteComponent { + _CharacterIconSpriteComponent(String characterIconPath) + : _characterIconPath = characterIconPath, + super( + anchor: Anchor.center, + position: Vector2(18.4, -45), + ); + + final String _characterIconPath; + + @override + Future onLoad() async { + await super.onLoad(); + final sprite = await Sprite.load( + _characterIconPath, + images: Images(prefix: ''), + ); + this.sprite = sprite; + size = sprite.originalSize / 10; + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/game_over.dart b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart similarity index 71% rename from packages/pinball_components/sandbox/lib/stories/backboard/game_over.dart rename to packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart index a95fa926..7484e86d 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/game_over.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_game_over_game.dart @@ -1,6 +1,7 @@ import 'package:flame/components.dart'; import 'package:flutter/material.dart'; -import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/pinball_components.dart' hide Assets; +import 'package:pinball_theme/pinball_theme.dart'; import 'package:sandbox/common/common.dart'; class BackboardGameOverGame extends BasicKeyboardGame { @@ -16,12 +17,10 @@ class BackboardGameOverGame extends BasicKeyboardGame { final String character; final characterIconPaths = { - 'Dash': 'packages/pinball_theme/assets/images/dash/leaderboard_icon.png', - 'Sparky': - 'packages/pinball_theme/assets/images/sparky/leaderboard_icon.png', - 'Android': - 'packages/pinball_theme/assets/images/android/leaderboard_icon.png', - 'Dino': 'packages/pinball_theme/assets/images/dino/leaderboard_icon.png', + 'Dash': Assets.images.dash.leaderboardIcon.keyName, + 'Sparky': Assets.images.sparky.leaderboardIcon.keyName, + 'Android': Assets.images.android.leaderboardIcon.keyName, + 'Dino': Assets.images.dino.leaderboardIcon.keyName, }; @override diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/waiting.dart b/packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart similarity index 100% rename from packages/pinball_components/sandbox/lib/stories/backboard/waiting.dart rename to packages/pinball_components/sandbox/lib/stories/backboard/backboard_waiting_game.dart diff --git a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart index 4a2a70ee..e64667a8 100644 --- a/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/backboard/stories.dart @@ -1,8 +1,8 @@ import 'package:dashbook/dashbook.dart'; import 'package:flame/game.dart'; import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/backboard/game_over.dart'; -import 'package:sandbox/stories/backboard/waiting.dart'; +import 'package:sandbox/stories/backboard/backboard_game_over_game.dart'; +import 'package:sandbox/stories/backboard/backboard_waiting_game.dart'; void addBackboardStories(Dashbook dashbook) { final characters = ['Dash', 'Sparky', 'Android', 'Dino']; diff --git a/packages/pinball_components/sandbox/pubspec.lock b/packages/pinball_components/sandbox/pubspec.lock index 061b03ae..d7ab8901 100644 --- a/packages/pinball_components/sandbox/pubspec.lock +++ b/packages/pinball_components/sandbox/pubspec.lock @@ -255,7 +255,7 @@ packages: source: path version: "1.0.0+1" pinball_theme: - dependency: transitive + dependency: "direct main" description: path: "../../pinball_theme" relative: true diff --git a/packages/pinball_components/sandbox/pubspec.yaml b/packages/pinball_components/sandbox/pubspec.yaml index 03a46ee0..dd9f8259 100644 --- a/packages/pinball_components/sandbox/pubspec.yaml +++ b/packages/pinball_components/sandbox/pubspec.yaml @@ -16,6 +16,8 @@ dependencies: path: ../ pinball_flame: path: ../../pinball_flame + pinball_theme: + path: ../../pinball_theme dev_dependencies: flutter_test: diff --git a/packages/pinball_theme/test/src/themes/android_theme_test.dart b/packages/pinball_theme/test/src/themes/android_theme_test.dart index 5936ee85..27a06922 100644 --- a/packages/pinball_theme/test/src/themes/android_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/android_theme_test.dart @@ -1,6 +1,5 @@ // ignore_for_file: prefer_const_constructors -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_theme/pinball_theme.dart'; @@ -13,34 +12,5 @@ void main() { test('supports value equality', () { expect(AndroidTheme(), equals(AndroidTheme())); }); - - test('ballColor is correct', () { - expect(AndroidTheme().ballColor, equals(Colors.green)); - }); - - test('character asset is correct', () { - expect( - AndroidTheme().character, - equals(Assets.images.android.character), - ); - }); - - test('background asset is correct', () { - expect( - AndroidTheme().background, - equals(Assets.images.android.background), - ); - }); - - test('icon asset is correct', () { - expect(AndroidTheme().icon, equals(Assets.images.android.icon)); - }); - - test('leaderboard icon asset is correct', () { - expect( - AndroidTheme().leaderboardIcon, - equals(Assets.images.android.leaderboardIcon), - ); - }); }); } diff --git a/packages/pinball_theme/test/src/themes/dash_theme_test.dart b/packages/pinball_theme/test/src/themes/dash_theme_test.dart index b753ec8d..16605fb3 100644 --- a/packages/pinball_theme/test/src/themes/dash_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/dash_theme_test.dart @@ -1,6 +1,5 @@ // ignore_for_file: prefer_const_constructors -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_theme/pinball_theme.dart'; @@ -13,34 +12,5 @@ void main() { test('supports value equality', () { expect(DashTheme(), equals(DashTheme())); }); - - test('ballColor is correct', () { - expect(DashTheme().ballColor, equals(Colors.blue)); - }); - - test('character asset is correct', () { - expect( - DashTheme().character, - equals(Assets.images.dash.character), - ); - }); - - test('background asset is correct', () { - expect( - DashTheme().background, - equals(Assets.images.dash.background), - ); - }); - - test('icon asset is correct', () { - expect(DashTheme().icon, equals(Assets.images.dash.icon)); - }); - - test('leaderboard icon asset is correct', () { - expect( - DashTheme().leaderboardIcon, - equals(Assets.images.dash.leaderboardIcon), - ); - }); }); } diff --git a/packages/pinball_theme/test/src/themes/dino_theme_test.dart b/packages/pinball_theme/test/src/themes/dino_theme_test.dart index c9fab6e2..45ea0813 100644 --- a/packages/pinball_theme/test/src/themes/dino_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/dino_theme_test.dart @@ -1,6 +1,5 @@ // ignore_for_file: prefer_const_constructors -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_theme/pinball_theme.dart'; @@ -13,34 +12,5 @@ void main() { test('supports value equality', () { expect(DinoTheme(), equals(DinoTheme())); }); - - test('ballColor is correct', () { - expect(DinoTheme().ballColor, equals(Colors.grey)); - }); - - test('character asset is correct', () { - expect( - DinoTheme().character, - equals(Assets.images.dino.character), - ); - }); - - test('background asset is correct', () { - expect( - DinoTheme().background, - equals(Assets.images.dino.background), - ); - }); - - test('icon asset is correct', () { - expect(DinoTheme().icon, equals(Assets.images.dino.icon)); - }); - - test('leaderboard icon asset is correct', () { - expect( - DinoTheme().leaderboardIcon, - equals(Assets.images.dino.leaderboardIcon), - ); - }); }); } diff --git a/packages/pinball_theme/test/src/themes/sparky_theme_test.dart b/packages/pinball_theme/test/src/themes/sparky_theme_test.dart index 2c85cd20..ce276938 100644 --- a/packages/pinball_theme/test/src/themes/sparky_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/sparky_theme_test.dart @@ -1,6 +1,5 @@ // ignore_for_file: prefer_const_constructors -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_theme/pinball_theme.dart'; @@ -13,34 +12,5 @@ void main() { test('supports value equality', () { expect(SparkyTheme(), equals(SparkyTheme())); }); - - test('ballColor is correct', () { - expect(SparkyTheme().ballColor, equals(Colors.orange)); - }); - - test('character asset is correct', () { - expect( - SparkyTheme().character, - equals(Assets.images.sparky.character), - ); - }); - - test('background asset is correct', () { - expect( - SparkyTheme().background, - equals(Assets.images.sparky.background), - ); - }); - - test('icon asset is correct', () { - expect(SparkyTheme().icon, equals(Assets.images.sparky.icon)); - }); - - test('leaderboard icon asset is correct', () { - expect( - SparkyTheme().leaderboardIcon, - equals(Assets.images.sparky.leaderboardIcon), - ); - }); }); }