diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index 6b983cea..6dab64a4 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -62,8 +62,6 @@ class BallController extends ComponentController Future turboCharge() async { gameRef.read().add(const SparkyTurboChargeActivated()); - // TODO(allisonryan0002): adjust delay to match animation duration once - // given animations. component.stop(); await Future.delayed(const Duration(seconds: 1)); component.resume(); diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index 1cd4f194..ec323b92 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -80,11 +80,7 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.alienBumper.b.inactive.keyName), images.load(components.Assets.images.chromeDino.mouth.keyName), images.load(components.Assets.images.chromeDino.head.keyName), - images.load(components.Assets.images.plunger.plunger.keyName), - images.load(components.Assets.images.plunger.rocket.keyName), - images.load(components.Assets.images.sparky.computer.base.keyName), images.load(components.Assets.images.sparky.computer.top.keyName), - images.load(components.Assets.images.sparky.bumper.a.active.keyName), images.load(components.Assets.images.sparky.bumper.a.inactive.keyName), images.load(components.Assets.images.sparky.bumper.b.active.keyName), images.load(components.Assets.images.sparky.bumper.b.inactive.keyName), diff --git a/packages/pinball_components/assets/images/sparky/animatronic.png b/packages/pinball_components/assets/images/sparky/animatronic.png new file mode 100644 index 00000000..5aa272d0 Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/animatronic.png differ diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 0d67f870..558d36a1 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -257,6 +257,8 @@ class $AssetsImagesSpaceshipGen { class $AssetsImagesSparkyGen { const $AssetsImagesSparkyGen(); + AssetGenImage get animatronic => + const AssetGenImage('assets/images/sparky/animatronic.png'); $AssetsImagesSparkyBumperGen get bumper => const $AssetsImagesSparkyBumperGen(); $AssetsImagesSparkyComputerGen get computer => diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index 9ea39d69..57e93abb 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -29,5 +29,6 @@ export 'slingshot.dart'; export 'spaceship.dart'; export 'spaceship_rail.dart'; export 'spaceship_ramp.dart'; +export 'sparky_animatronic.dart'; export 'sparky_bumper.dart'; export 'sparky_computer.dart'; diff --git a/packages/pinball_components/lib/src/components/sparky_animatronic.dart b/packages/pinball_components/lib/src/components/sparky_animatronic.dart new file mode 100644 index 00000000..c9493eca --- /dev/null +++ b/packages/pinball_components/lib/src/components/sparky_animatronic.dart @@ -0,0 +1,54 @@ +import 'package:flame/components.dart'; +import 'package:pinball_components/pinball_components.dart'; + +/// {@template sparky_animatronic} +/// Animated Sparky that sits on top of the [SparkyComputer]. +/// {@endtemplate} +class SparkyAnimatronic extends SpriteAnimationComponent with HasGameRef { + /// {@macro sparky_animatronic} + SparkyAnimatronic() + : super( + anchor: Anchor.center, + playing: false, + priority: SpaceshipRamp.ballPriorityInsideRamp + 2, + ); + + @override + Future onLoad() async { + await super.onLoad(); + + final spriteSheet = await gameRef.images.load( + Assets.images.sparky.animatronic.keyName, + ); + + const amountPerRow = 8; + const amountPerColumn = 6; + final textureSize = Vector2( + spriteSheet.width / amountPerRow, + spriteSheet.height / amountPerColumn, + ); + size = textureSize / 10; + + animation = SpriteAnimation.fromFrameData( + spriteSheet, + SpriteAnimationData.sequenced( + amount: amountPerRow * amountPerColumn, + amountPerRow: amountPerRow, + stepTime: 1 / 24, + textureSize: textureSize, + loop: false, + ), + ); + } + + @override + void update(double dt) { + super.update(dt); + if (animation != null) { + if (animation!.isLastFrame) { + animation!.reset(); + playing = false; + } + } + } +} diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index 7df3429a..a7cb8367 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -61,6 +61,7 @@ flutter: - assets/images/slingshot/ - assets/images/alien_bumper/a/ - assets/images/alien_bumper/b/ + - assets/images/sparky/ - assets/images/sparky/computer/ - assets/images/sparky/bumper/a/ - assets/images/sparky/bumper/b/