diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index 9dc88562..ba3a407e 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -101,6 +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(dashTheme.leaderboardIcon.keyName), images.load(sparkyTheme.leaderboardIcon.keyName), images.load(androidTheme.leaderboardIcon.keyName), diff --git a/packages/pinball_components/assets/images/multiplier/x2/active.png b/packages/pinball_components/assets/images/multiplier/x2/active.png new file mode 100644 index 00000000..be2b3f08 Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x2/active.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x2/inactive.png b/packages/pinball_components/assets/images/multiplier/x2/inactive.png new file mode 100644 index 00000000..7cc9fc4f Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x2/inactive.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x3/active.png b/packages/pinball_components/assets/images/multiplier/x3/active.png new file mode 100644 index 00000000..7fdedbbe Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x3/active.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x3/inactive.png b/packages/pinball_components/assets/images/multiplier/x3/inactive.png new file mode 100644 index 00000000..460b1a0e Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x3/inactive.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x4/active.png b/packages/pinball_components/assets/images/multiplier/x4/active.png new file mode 100644 index 00000000..5beceabb Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x4/active.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x4/inactive.png b/packages/pinball_components/assets/images/multiplier/x4/inactive.png new file mode 100644 index 00000000..e8a6256e Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x4/inactive.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x5/active.png b/packages/pinball_components/assets/images/multiplier/x5/active.png new file mode 100644 index 00000000..23fd3aab Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x5/active.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x5/inactive.png b/packages/pinball_components/assets/images/multiplier/x5/inactive.png new file mode 100644 index 00000000..96e018e4 Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x5/inactive.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x6/active.png b/packages/pinball_components/assets/images/multiplier/x6/active.png new file mode 100644 index 00000000..54244bab Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x6/active.png differ diff --git a/packages/pinball_components/assets/images/multiplier/x6/inactive.png b/packages/pinball_components/assets/images/multiplier/x6/inactive.png new file mode 100644 index 00000000..d518e1eb Binary files /dev/null and b/packages/pinball_components/assets/images/multiplier/x6/inactive.png differ diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 4d4cda7d..91b0aead 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -26,6 +26,8 @@ class $AssetsImagesGen { $AssetsImagesKickerGen get kicker => const $AssetsImagesKickerGen(); $AssetsImagesLaunchRampGen get launchRamp => const $AssetsImagesLaunchRampGen(); + $AssetsImagesMultiplierGen get multiplier => + const $AssetsImagesMultiplierGen(); $AssetsImagesPlungerGen get plunger => const $AssetsImagesPlungerGen(); $AssetsImagesSignpostGen get signpost => const $AssetsImagesSignpostGen(); $AssetsImagesSlingshotGen get slingshot => const $AssetsImagesSlingshotGen(); @@ -197,6 +199,16 @@ class $AssetsImagesLaunchRampGen { const AssetGenImage('assets/images/launch_ramp/ramp.png'); } +class $AssetsImagesMultiplierGen { + const $AssetsImagesMultiplierGen(); + + $AssetsImagesMultiplierX2Gen get x2 => const $AssetsImagesMultiplierX2Gen(); + $AssetsImagesMultiplierX3Gen get x3 => const $AssetsImagesMultiplierX3Gen(); + $AssetsImagesMultiplierX4Gen get x4 => const $AssetsImagesMultiplierX4Gen(); + $AssetsImagesMultiplierX5Gen get x5 => const $AssetsImagesMultiplierX5Gen(); + $AssetsImagesMultiplierX6Gen get x6 => const $AssetsImagesMultiplierX6Gen(); +} + class $AssetsImagesPlungerGen { const $AssetsImagesPlungerGen(); @@ -261,8 +273,10 @@ class $AssetsImagesSpaceshipGen { class $AssetsImagesSparkyGen { const $AssetsImagesSparkyGen(); + /// File path: assets/images/sparky/animatronic.png AssetGenImage get animatronic => const AssetGenImage('assets/images/sparky/animatronic.png'); + $AssetsImagesSparkyBumperGen get bumper => const $AssetsImagesSparkyBumperGen(); $AssetsImagesSparkyComputerGen get computer => @@ -302,6 +316,66 @@ class $AssetsImagesDashBumperGen { const $AssetsImagesDashBumperMainGen(); } +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/inactive.png + AssetGenImage get inactive => + const AssetGenImage('assets/images/multiplier/x2/inactive.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/inactive.png + AssetGenImage get inactive => + const AssetGenImage('assets/images/multiplier/x3/inactive.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/inactive.png + AssetGenImage get inactive => + const AssetGenImage('assets/images/multiplier/x4/inactive.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/inactive.png + AssetGenImage get inactive => + const AssetGenImage('assets/images/multiplier/x5/inactive.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/inactive.png + AssetGenImage get inactive => + const AssetGenImage('assets/images/multiplier/x6/inactive.png'); +} + class $AssetsImagesSpaceshipRailGen { const $AssetsImagesSpaceshipRailGen(); diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index 57e93abb..ae845355 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -19,6 +19,7 @@ export 'kicker.dart'; export 'launch_ramp.dart'; export 'layer.dart'; export 'layer_sensor.dart'; +export 'multiplier.dart'; export 'plunger.dart'; export 'render_priority.dart'; export 'rocket.dart'; diff --git a/packages/pinball_components/lib/src/components/multiplier.dart b/packages/pinball_components/lib/src/components/multiplier.dart new file mode 100644 index 00000000..bf165e06 --- /dev/null +++ b/packages/pinball_components/lib/src/components/multiplier.dart @@ -0,0 +1,47 @@ +import 'package:flame/components.dart'; + +/// Indicates the current sprite state of the multiplier. +enum MultiplierSpriteState { + /// A lit up bumper. + active, + + /// A dimmed bumper. + inactive, +} + +/// {@template multiplier_sprite_group_component} +/// A [SpriteGroupComponent] for the multiplier over the board. +/// {@endtemplate} +class MultiplierSpriteGroupComponent + extends SpriteGroupComponent with HasGameRef { + /// {@macro multiplier_sprite_group_component} + MultiplierSpriteGroupComponent({ + required Vector2 position, + required String onAssetPath, + required String offAssetPath, + }) : _onAssetPath = onAssetPath, + _offAssetPath = offAssetPath, + super( + anchor: Anchor.center, + position: position, + ); + + final String _onAssetPath; + final String _offAssetPath; + + @override + Future onLoad() async { + await super.onLoad(); + + final sprites = { + MultiplierSpriteState.active: + Sprite(gameRef.images.fromCache(_onAssetPath)), + MultiplierSpriteState.inactive: + Sprite(gameRef.images.fromCache(_offAssetPath)), + }; + this.sprites = sprites; + + current = MultiplierSpriteState.inactive; + size = sprites[current]!.originalSize / 10; + } +} diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index a7cb8367..313fc437 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -69,6 +69,11 @@ flutter: - assets/images/backboard/ - assets/images/google_word/ - assets/images/signpost/ + - assets/images/multiplier/x2/ + - assets/images/multiplier/x3/ + - assets/images/multiplier/x4/ + - assets/images/multiplier/x5/ + - assets/images/multiplier/x6/ flutter_gen: line_length: 80