diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 46e5e8cf..4bae253b 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -3,7 +3,7 @@ export 'board.dart'; export 'camera_controller.dart'; export 'controlled_ball.dart'; export 'controlled_flipper.dart'; -export 'controlled_multiplier.dart'; +export 'controlled_multipliers.dart'; export 'controlled_plunger.dart'; export 'flutter_forest.dart'; export 'game_flow_controller.dart'; diff --git a/lib/game/components/controlled_multiplier.dart b/lib/game/components/controlled_multipliers.dart similarity index 93% rename from lib/game/components/controlled_multiplier.dart rename to lib/game/components/controlled_multipliers.dart index 152d1f56..3c4c9e3a 100644 --- a/lib/game/components/controlled_multiplier.dart +++ b/lib/game/components/controlled_multipliers.dart @@ -16,26 +16,26 @@ class Multipliers extends Component /// {@macro multipliers_group_component} Multipliers() : x2multiplier = Multiplier( - value: 2, + value: MultiplierValue.x2, position: Vector2(-19.5, -2), rotation: -15 * math.pi / 180, ), x3multiplier = Multiplier( - value: 3, + value: MultiplierValue.x3, position: Vector2(13, -9.5), rotation: 15 * math.pi / 180, ), x4multiplier = Multiplier( - value: 4, + value: MultiplierValue.x4, position: Vector2(0, -21), ), x5multiplier = Multiplier( - value: 5, + value: MultiplierValue.x5, position: Vector2(-8.5, -28), rotation: -3 * math.pi / 180, ), x6multiplier = Multiplier( - value: 6, + value: MultiplierValue.x6, position: Vector2(10, -31), rotation: 8 * math.pi / 180, ), diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index ba3a407e..5e082e12 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -101,16 +101,16 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.googleWord.letter5.keyName), images.load(components.Assets.images.googleWord.letter6.keyName), images.load(components.Assets.images.backboard.display.keyName), - images.load(components.Assets.images.multiplier.x2.active.keyName), - images.load(components.Assets.images.multiplier.x2.inactive.keyName), - images.load(components.Assets.images.multiplier.x3.active.keyName), - images.load(components.Assets.images.multiplier.x3.inactive.keyName), - images.load(components.Assets.images.multiplier.x4.active.keyName), - images.load(components.Assets.images.multiplier.x4.inactive.keyName), - images.load(components.Assets.images.multiplier.x5.active.keyName), - images.load(components.Assets.images.multiplier.x5.inactive.keyName), - images.load(components.Assets.images.multiplier.x6.active.keyName), - images.load(components.Assets.images.multiplier.x6.inactive.keyName), + images.load(components.Assets.images.multiplier.x2.lit.keyName), + images.load(components.Assets.images.multiplier.x2.dimmed.keyName), + images.load(components.Assets.images.multiplier.x3.lit.keyName), + images.load(components.Assets.images.multiplier.x3.dimmed.keyName), + images.load(components.Assets.images.multiplier.x4.lit.keyName), + images.load(components.Assets.images.multiplier.x4.dimmed.keyName), + images.load(components.Assets.images.multiplier.x5.lit.keyName), + images.load(components.Assets.images.multiplier.x5.dimmed.keyName), + images.load(components.Assets.images.multiplier.x6.lit.keyName), + images.load(components.Assets.images.multiplier.x6.dimmed.keyName), images.load(dashTheme.leaderboardIcon.keyName), images.load(sparkyTheme.leaderboardIcon.keyName), images.load(androidTheme.leaderboardIcon.keyName), diff --git a/packages/pinball_components/assets/images/multiplier/x2/inactive.png b/packages/pinball_components/assets/images/multiplier/x2/dimmed.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x2/inactive.png rename to packages/pinball_components/assets/images/multiplier/x2/dimmed.png diff --git a/packages/pinball_components/assets/images/multiplier/x2/active.png b/packages/pinball_components/assets/images/multiplier/x2/lit.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x2/active.png rename to packages/pinball_components/assets/images/multiplier/x2/lit.png diff --git a/packages/pinball_components/assets/images/multiplier/x3/inactive.png b/packages/pinball_components/assets/images/multiplier/x3/dimmed.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x3/inactive.png rename to packages/pinball_components/assets/images/multiplier/x3/dimmed.png diff --git a/packages/pinball_components/assets/images/multiplier/x3/active.png b/packages/pinball_components/assets/images/multiplier/x3/lit.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x3/active.png rename to packages/pinball_components/assets/images/multiplier/x3/lit.png diff --git a/packages/pinball_components/assets/images/multiplier/x4/inactive.png b/packages/pinball_components/assets/images/multiplier/x4/dimmed.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x4/inactive.png rename to packages/pinball_components/assets/images/multiplier/x4/dimmed.png diff --git a/packages/pinball_components/assets/images/multiplier/x4/active.png b/packages/pinball_components/assets/images/multiplier/x4/lit.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x4/active.png rename to packages/pinball_components/assets/images/multiplier/x4/lit.png diff --git a/packages/pinball_components/assets/images/multiplier/x5/inactive.png b/packages/pinball_components/assets/images/multiplier/x5/dimmed.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x5/inactive.png rename to packages/pinball_components/assets/images/multiplier/x5/dimmed.png diff --git a/packages/pinball_components/assets/images/multiplier/x5/active.png b/packages/pinball_components/assets/images/multiplier/x5/lit.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x5/active.png rename to packages/pinball_components/assets/images/multiplier/x5/lit.png diff --git a/packages/pinball_components/assets/images/multiplier/x6/inactive.png b/packages/pinball_components/assets/images/multiplier/x6/dimmed.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x6/inactive.png rename to packages/pinball_components/assets/images/multiplier/x6/dimmed.png diff --git a/packages/pinball_components/assets/images/multiplier/x6/active.png b/packages/pinball_components/assets/images/multiplier/x6/lit.png similarity index 100% rename from packages/pinball_components/assets/images/multiplier/x6/active.png rename to packages/pinball_components/assets/images/multiplier/x6/lit.png diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 91b0aead..c5e5780f 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -319,61 +319,61 @@ class $AssetsImagesDashBumperGen { class $AssetsImagesMultiplierX2Gen { const $AssetsImagesMultiplierX2Gen(); - /// File path: assets/images/multiplier/x2/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/multiplier/x2/active.png'); + /// File path: assets/images/multiplier/x2/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/multiplier/x2/dimmed.png'); - /// File path: assets/images/multiplier/x2/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/multiplier/x2/inactive.png'); + /// File path: assets/images/multiplier/x2/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/multiplier/x2/lit.png'); } class $AssetsImagesMultiplierX3Gen { const $AssetsImagesMultiplierX3Gen(); - /// File path: assets/images/multiplier/x3/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/multiplier/x3/active.png'); + /// File path: assets/images/multiplier/x3/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/multiplier/x3/dimmed.png'); - /// File path: assets/images/multiplier/x3/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/multiplier/x3/inactive.png'); + /// File path: assets/images/multiplier/x3/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/multiplier/x3/lit.png'); } class $AssetsImagesMultiplierX4Gen { const $AssetsImagesMultiplierX4Gen(); - /// File path: assets/images/multiplier/x4/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/multiplier/x4/active.png'); + /// File path: assets/images/multiplier/x4/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/multiplier/x4/dimmed.png'); - /// File path: assets/images/multiplier/x4/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/multiplier/x4/inactive.png'); + /// File path: assets/images/multiplier/x4/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/multiplier/x4/lit.png'); } class $AssetsImagesMultiplierX5Gen { const $AssetsImagesMultiplierX5Gen(); - /// File path: assets/images/multiplier/x5/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/multiplier/x5/active.png'); + /// File path: assets/images/multiplier/x5/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/multiplier/x5/dimmed.png'); - /// File path: assets/images/multiplier/x5/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/multiplier/x5/inactive.png'); + /// File path: assets/images/multiplier/x5/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/multiplier/x5/lit.png'); } class $AssetsImagesMultiplierX6Gen { const $AssetsImagesMultiplierX6Gen(); - /// File path: assets/images/multiplier/x6/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/multiplier/x6/active.png'); + /// File path: assets/images/multiplier/x6/dimmed.png + AssetGenImage get dimmed => + const AssetGenImage('assets/images/multiplier/x6/dimmed.png'); - /// File path: assets/images/multiplier/x6/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/multiplier/x6/inactive.png'); + /// File path: assets/images/multiplier/x6/lit.png + AssetGenImage get lit => + const AssetGenImage('assets/images/multiplier/x6/lit.png'); } class $AssetsImagesSpaceshipRailGen { diff --git a/packages/pinball_components/lib/src/components/multiplier.dart b/packages/pinball_components/lib/src/components/multiplier.dart index ea5ead10..4aab2936 100644 --- a/packages/pinball_components/lib/src/components/multiplier.dart +++ b/packages/pinball_components/lib/src/components/multiplier.dart @@ -1,3 +1,5 @@ +// ignore_for_file: public_member_api_docs + import 'package:flame/components.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/gen/assets.gen.dart'; @@ -8,27 +10,24 @@ import 'package:pinball_components/gen/assets.gen.dart'; class Multiplier extends Component { /// {@macro multiplier} Multiplier({ - required int value, + required MultiplierValue value, required Vector2 position, double rotation = 0, - }) : assert( - 2 <= value && value <= 6, - 'multiplier value must be in range 2 <= value <= 6', - ), - _value = value, - _position = position, - _rotation = rotation, - super(); - - final int _value; - final Vector2 _position; - final double _rotation; - late final MultiplierSpriteGroupComponent _sprite; + }) : _value = value, + _sprite = MultiplierSpriteGroupComponent( + position: position, + onAssetPath: value.onAssetPath, + offAssetPath: value.offAssetPath, + rotation: rotation, + ); + + final MultiplierValue _value; + final MultiplierSpriteGroupComponent _sprite; /// Change current [Sprite] to active or inactive depending on applied /// multiplier. void toggle(int multiplier) { - if (multiplier == _value) { + if (_value.equalsTo(multiplier)) { _sprite.current = MultiplierSpriteState.active; } else { _sprite.current = MultiplierSpriteState.inactive; @@ -38,43 +37,19 @@ class Multiplier extends Component { @override Future onLoad() async { await super.onLoad(); - - String? onAssetPath; - String? offAssetPath; - - switch (_value) { - case 2: - onAssetPath = Assets.images.multiplier.x2.active.keyName; - offAssetPath = Assets.images.multiplier.x2.inactive.keyName; - break; - case 3: - onAssetPath = Assets.images.multiplier.x3.active.keyName; - offAssetPath = Assets.images.multiplier.x3.inactive.keyName; - break; - case 4: - onAssetPath = Assets.images.multiplier.x4.active.keyName; - offAssetPath = Assets.images.multiplier.x4.inactive.keyName; - break; - case 5: - onAssetPath = Assets.images.multiplier.x5.active.keyName; - offAssetPath = Assets.images.multiplier.x5.inactive.keyName; - break; - case 6: - onAssetPath = Assets.images.multiplier.x6.active.keyName; - offAssetPath = Assets.images.multiplier.x6.inactive.keyName; - break; - } - - _sprite = MultiplierSpriteGroupComponent( - position: _position, - onAssetPath: onAssetPath!, - offAssetPath: offAssetPath!, - )..angle = _rotation; - await add(_sprite); } } +/// Available multiplier values. +enum MultiplierValue { + x2, + x3, + x4, + x5, + x6, +} + /// Indicates the current sprite state of the multiplier. enum MultiplierSpriteState { /// A lit up bumper. @@ -84,6 +59,53 @@ enum MultiplierSpriteState { inactive, } +extension on MultiplierValue { + String get onAssetPath { + switch (this) { + case MultiplierValue.x2: + return Assets.images.multiplier.x2.lit.keyName; + case MultiplierValue.x3: + return Assets.images.multiplier.x3.lit.keyName; + case MultiplierValue.x4: + return Assets.images.multiplier.x4.lit.keyName; + case MultiplierValue.x5: + return Assets.images.multiplier.x5.lit.keyName; + case MultiplierValue.x6: + return Assets.images.multiplier.x6.lit.keyName; + } + } + + String get offAssetPath { + switch (this) { + case MultiplierValue.x2: + return Assets.images.multiplier.x2.dimmed.keyName; + case MultiplierValue.x3: + return Assets.images.multiplier.x3.dimmed.keyName; + case MultiplierValue.x4: + return Assets.images.multiplier.x4.dimmed.keyName; + case MultiplierValue.x5: + return Assets.images.multiplier.x5.dimmed.keyName; + case MultiplierValue.x6: + return Assets.images.multiplier.x6.dimmed.keyName; + } + } + + bool equalsTo(int value) { + switch (this) { + case MultiplierValue.x2: + return value == 2; + case MultiplierValue.x3: + return value == 3; + case MultiplierValue.x4: + return value == 4; + case MultiplierValue.x5: + return value == 5; + case MultiplierValue.x6: + return value == 6; + } + } +} + /// {@template multiplier_sprite_group_component} /// A [SpriteGroupComponent] for the multiplier over the board. /// {@endtemplate} @@ -95,11 +117,13 @@ class MultiplierSpriteGroupComponent required Vector2 position, required String onAssetPath, required String offAssetPath, + required double rotation, }) : _onAssetPath = onAssetPath, _offAssetPath = offAssetPath, super( anchor: Anchor.center, position: position, + angle: rotation, ); final String _onAssetPath; diff --git a/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart index 860663dc..f33729d3 100644 --- a/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart @@ -8,16 +8,16 @@ class MultipliersGame extends BallGame with KeyboardEvents { MultipliersGame() : super( imagesFileNames: [ - Assets.images.multiplier.x2.active.keyName, - Assets.images.multiplier.x2.inactive.keyName, - Assets.images.multiplier.x3.active.keyName, - Assets.images.multiplier.x3.inactive.keyName, - Assets.images.multiplier.x4.active.keyName, - Assets.images.multiplier.x4.inactive.keyName, - Assets.images.multiplier.x5.active.keyName, - Assets.images.multiplier.x5.inactive.keyName, - Assets.images.multiplier.x6.active.keyName, - Assets.images.multiplier.x6.inactive.keyName, + Assets.images.multiplier.x2.lit.keyName, + Assets.images.multiplier.x2.dimmed.keyName, + Assets.images.multiplier.x3.lit.keyName, + Assets.images.multiplier.x3.dimmed.keyName, + Assets.images.multiplier.x4.lit.keyName, + Assets.images.multiplier.x4.dimmed.keyName, + Assets.images.multiplier.x5.lit.keyName, + Assets.images.multiplier.x5.dimmed.keyName, + Assets.images.multiplier.x6.lit.keyName, + Assets.images.multiplier.x6.dimmed.keyName, ], ); @@ -41,23 +41,23 @@ class MultipliersGame extends BallGame with KeyboardEvents { camera.followVector2(Vector2.zero()); x2 = Multiplier( - value: 2, + value: MultiplierValue.x2, position: Vector2(-20, 0), ); x3 = Multiplier( - value: 3, + value: MultiplierValue.x3, position: Vector2(20, -5), ); x4 = Multiplier( - value: 4, + value: MultiplierValue.x4, position: Vector2(0, -15), ); x5 = Multiplier( - value: 5, + value: MultiplierValue.x5, position: Vector2(-10, -25), ); x6 = Multiplier( - value: 6, + value: MultiplierValue.x6, position: Vector2(10, -35), ); diff --git a/packages/pinball_components/test/src/components/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier_test.dart index 92909902..71841368 100644 --- a/packages/pinball_components/test/src/components/multiplier_test.dart +++ b/packages/pinball_components/test/src/components/multiplier_test.dart @@ -11,16 +11,16 @@ void main() { group('MultiplierSpriteGroupComponent', () { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ - Assets.images.multiplier.x2.active.keyName, - Assets.images.multiplier.x2.inactive.keyName, - Assets.images.multiplier.x3.active.keyName, - Assets.images.multiplier.x3.inactive.keyName, - Assets.images.multiplier.x4.active.keyName, - Assets.images.multiplier.x4.inactive.keyName, - Assets.images.multiplier.x5.active.keyName, - Assets.images.multiplier.x5.inactive.keyName, - Assets.images.multiplier.x6.active.keyName, - Assets.images.multiplier.x6.inactive.keyName, + Assets.images.multiplier.x2.lit.keyName, + Assets.images.multiplier.x2.dimmed.keyName, + Assets.images.multiplier.x3.lit.keyName, + Assets.images.multiplier.x3.dimmed.keyName, + Assets.images.multiplier.x4.lit.keyName, + Assets.images.multiplier.x4.dimmed.keyName, + Assets.images.multiplier.x5.lit.keyName, + Assets.images.multiplier.x5.dimmed.keyName, + Assets.images.multiplier.x6.lit.keyName, + Assets.images.multiplier.x6.dimmed.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); diff --git a/test/game/components/controlled_multiplier_test.dart b/test/game/components/controlled_multiplier_test.dart index 4662187a..0d5b8960 100644 --- a/test/game/components/controlled_multiplier_test.dart +++ b/test/game/components/controlled_multiplier_test.dart @@ -11,16 +11,16 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ - Assets.images.multiplier.x2.active.keyName, - Assets.images.multiplier.x2.inactive.keyName, - Assets.images.multiplier.x3.active.keyName, - Assets.images.multiplier.x3.inactive.keyName, - Assets.images.multiplier.x4.active.keyName, - Assets.images.multiplier.x4.inactive.keyName, - Assets.images.multiplier.x5.active.keyName, - Assets.images.multiplier.x5.inactive.keyName, - Assets.images.multiplier.x6.active.keyName, - Assets.images.multiplier.x6.inactive.keyName, + Assets.images.multiplier.x2.lit.keyName, + Assets.images.multiplier.x2.dimmed.keyName, + Assets.images.multiplier.x3.lit.keyName, + Assets.images.multiplier.x3.dimmed.keyName, + Assets.images.multiplier.x4.lit.keyName, + Assets.images.multiplier.x4.dimmed.keyName, + Assets.images.multiplier.x5.lit.keyName, + Assets.images.multiplier.x5.dimmed.keyName, + Assets.images.multiplier.x6.lit.keyName, + Assets.images.multiplier.x6.dimmed.keyName, ]; final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index 4323da85..e8fc3ed5 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -56,16 +56,16 @@ void main() { Assets.images.slingshot.lower.keyName, Assets.images.dino.dinoLandTop.keyName, Assets.images.dino.dinoLandBottom.keyName, - Assets.images.multiplier.x2.active.keyName, - Assets.images.multiplier.x2.inactive.keyName, - Assets.images.multiplier.x3.active.keyName, - Assets.images.multiplier.x3.inactive.keyName, - Assets.images.multiplier.x4.active.keyName, - Assets.images.multiplier.x4.inactive.keyName, - Assets.images.multiplier.x5.active.keyName, - Assets.images.multiplier.x5.inactive.keyName, - Assets.images.multiplier.x6.active.keyName, - Assets.images.multiplier.x6.inactive.keyName, + Assets.images.multiplier.x2.lit.keyName, + Assets.images.multiplier.x2.dimmed.keyName, + Assets.images.multiplier.x3.lit.keyName, + Assets.images.multiplier.x3.dimmed.keyName, + Assets.images.multiplier.x4.lit.keyName, + Assets.images.multiplier.x4.dimmed.keyName, + Assets.images.multiplier.x5.lit.keyName, + Assets.images.multiplier.x5.dimmed.keyName, + Assets.images.multiplier.x6.lit.keyName, + Assets.images.multiplier.x6.dimmed.keyName, ]; final flameTester = FlameTester(() => PinballTestGame(assets)); final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets));