diff --git a/lib/game/components/alien_zone.dart b/lib/game/components/alien_zone.dart index 30d7bbd5..720c1180 100644 --- a/lib/game/components/alien_zone.dart +++ b/lib/game/components/alien_zone.dart @@ -5,14 +5,12 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template alien_zone} /// Area positioned below [Spaceship] where the [Ball] /// can bounce off [AlienBumper]s. /// -/// When a [Ball] hits [AlienBumper]s, they toggle between activated and -/// deactivated states. +/// When a [Ball] hits an [AlienBumper], the bumper animates. /// {@endtemplate} class AlienZone extends Component with HasGameRef { /// {@macro alien_zone} @@ -22,12 +20,12 @@ class AlienZone extends Component with HasGameRef { Future onLoad() async { await super.onLoad(); - gameRef.addContactCallback(_ControlledAlienBumperBallContactCallback()); + gameRef.addContactCallback(AlienBumperBallContactCallback()); - final lowerBumper = ControlledAlienBumper.a() - ..initialPosition = Vector2(-32.52, -9.34); - final upperBumper = ControlledAlienBumper.b() - ..initialPosition = Vector2(-22.89, -17.43); + final lowerBumper = _AlienBumper.a() + ..initialPosition = Vector2(-32.52, -9.1); + final upperBumper = _AlienBumper.b() + ..initialPosition = Vector2(-22.89, -17.35); await addAll([ lowerBumper, @@ -36,60 +34,27 @@ class AlienZone extends Component with HasGameRef { } } -/// {@template controlled_alien_bumper} -/// [AlienBumper] with [_AlienBumperController] attached. -/// {@endtemplate} -@visibleForTesting -class ControlledAlienBumper extends AlienBumper - with Controls<_AlienBumperController>, ScorePoints { - /// {@macro controlled_alien_bumper} - ControlledAlienBumper.a() : super.a() { - controller = _AlienBumperController(this); - } +// TODO(alestiago): Revisit ScorePoints logic once the FlameForge2D +// ContactCallback process is enhanced. +class _AlienBumper extends AlienBumper with ScorePoints { + _AlienBumper.a() : super.a(); - /// {@macro controlled_alien_bumper} - ControlledAlienBumper.b() : super.b() { - controller = _AlienBumperController(this); - } + _AlienBumper.b() : super.b(); @override - // TODO(ruimiguel): change points when get final points map. int get points => 20; } -/// {@template alien_bumper_controller} -/// Controls a [AlienBumper]. -/// {@endtemplate} -class _AlienBumperController extends ComponentController - with HasGameRef { - /// {@macro alien_bumper_controller} - _AlienBumperController(AlienBumper alienBumper) : super(alienBumper); - - /// Flag for activated state of the [AlienBumper]. - /// - /// Used to toggle [AlienBumper]s' state between activated and deactivated. - bool isActivated = false; - - /// Registers when a [AlienBumper] is hit by a [Ball]. - void hit() { - if (isActivated) { - component.deactivate(); - } else { - component.activate(); - } - isActivated = !isActivated; - } -} - -/// Listens when a [Ball] bounces bounces against a [AlienBumper]. -class _ControlledAlienBumperBallContactCallback - extends ContactCallback, Ball> { +/// Listens when a [Ball] bounces against an [AlienBumper]. +@visibleForTesting +class AlienBumperBallContactCallback + extends ContactCallback { @override void begin( - Controls<_AlienBumperController> controlledAlienBumper, + AlienBumper alienBumper, Ball _, Contact __, ) { - controlledAlienBumper.controller.hit(); + alienBumper.animate(); } } diff --git a/lib/game/components/sparky_fire_zone.dart b/lib/game/components/sparky_fire_zone.dart index 0a5abe88..6d78d32b 100644 --- a/lib/game/components/sparky_fire_zone.dart +++ b/lib/game/components/sparky_fire_zone.dart @@ -5,14 +5,12 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template sparky_fire_zone} /// Area positioned at the top left of the [Board] where the [Ball] /// can bounce off [SparkyBumper]s. /// -/// When a [Ball] hits [SparkyBumper]s, they toggle between activated and -/// deactivated states. +/// When a [Ball] hits [SparkyBumper]s, the bumper animates. /// {@endtemplate} class SparkyFireZone extends Component with HasGameRef { /// {@macro sparky_fire_zone} @@ -22,14 +20,14 @@ class SparkyFireZone extends Component with HasGameRef { Future onLoad() async { await super.onLoad(); - gameRef.addContactCallback(_ControlledSparkyBumperBallContactCallback()); + gameRef.addContactCallback(SparkyBumperBallContactCallback()); - final lowerLeftBumper = ControlledSparkyBumper.a() - ..initialPosition = Vector2(-23.15, -41.65); - final upperLeftBumper = ControlledSparkyBumper.b() - ..initialPosition = Vector2(-21.25, -58.15); - final rightBumper = ControlledSparkyBumper.c() - ..initialPosition = Vector2(-3.56, -53.051); + final lowerLeftBumper = _SparkyBumper.a() + ..initialPosition = Vector2(-22.9, -41.65); + final upperLeftBumper = _SparkyBumper.b() + ..initialPosition = Vector2(-21.25, -57.9); + final rightBumper = _SparkyBumper.c() + ..initialPosition = Vector2(-3.3, -52.55); await addAll([ lowerLeftBumper, @@ -39,65 +37,29 @@ class SparkyFireZone extends Component with HasGameRef { } } -/// {@template controlled_sparky_bumper} -/// [SparkyBumper] with [_SparkyBumperController] attached. -/// {@endtemplate} -@visibleForTesting -class ControlledSparkyBumper extends SparkyBumper - with Controls<_SparkyBumperController>, ScorePoints { - ///{@macro controlled_sparky_bumper} - ControlledSparkyBumper.a() : super.a() { - controller = _SparkyBumperController(this); - } +// TODO(alestiago): Revisit ScorePoints logic once the FlameForge2D +// ContactCallback process is enhanced. +class _SparkyBumper extends SparkyBumper with ScorePoints { + _SparkyBumper.a() : super.a(); - ///{@macro controlled_sparky_bumper} - ControlledSparkyBumper.b() : super.b() { - controller = _SparkyBumperController(this); - } + _SparkyBumper.b() : super.b(); - ///{@macro controlled_sparky_bumper} - ControlledSparkyBumper.c() : super.c() { - controller = _SparkyBumperController(this); - } + _SparkyBumper.c() : super.c(); @override int get points => 20; } -/// {@template sparky_bumper_controller} -/// Controls a [SparkyBumper]. -/// {@endtemplate} -class _SparkyBumperController extends ComponentController - with HasGameRef { - /// {@macro sparky_bumper_controller} - _SparkyBumperController(ControlledSparkyBumper controlledSparkyBumper) - : super(controlledSparkyBumper); - - /// Flag for activated state of the [SparkyBumper]. - /// - /// Used to toggle [SparkyBumper]s' state between activated and deactivated. - bool isActivated = false; - - /// Registers when a [SparkyBumper] is hit by a [Ball]. - void hit() { - if (isActivated) { - component.deactivate(); - } else { - component.activate(); - } - isActivated = !isActivated; - } -} - /// Listens when a [Ball] bounces bounces against a [SparkyBumper]. -class _ControlledSparkyBumperBallContactCallback - extends ContactCallback, Ball> { +@visibleForTesting +class SparkyBumperBallContactCallback + extends ContactCallback { @override void begin( - Controls<_SparkyBumperController> controlledSparkyBumper, + SparkyBumper sparkyBumper, Ball _, Contact __, ) { - controlledSparkyBumper.controller.hit(); + sparkyBumper.animate(); } } diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index e7c7a343..13c1fcf9 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -44,18 +44,22 @@ extension PinballGameAssetsX on PinballGame { ), images.load(components.Assets.images.spaceship.rail.main.keyName), images.load(components.Assets.images.spaceship.rail.foreground.keyName), + images.load(components.Assets.images.alienBumper.a.on.keyName), + images.load(components.Assets.images.alienBumper.a.off.keyName), + images.load(components.Assets.images.alienBumper.b.on.keyName), + images.load(components.Assets.images.alienBumper.b.off.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), - images.load(components.Assets.images.sparky.bumper.c.active.keyName), - images.load(components.Assets.images.sparky.bumper.c.inactive.keyName), + images.load(components.Assets.images.sparky.bumper.a.on.keyName), + images.load(components.Assets.images.sparky.bumper.a.off.keyName), + images.load(components.Assets.images.sparky.bumper.b.on.keyName), + images.load(components.Assets.images.sparky.bumper.b.off.keyName), + images.load(components.Assets.images.sparky.bumper.c.on.keyName), + images.load(components.Assets.images.sparky.bumper.c.off.keyName), images.load(components.Assets.images.backboard.backboardScores.keyName), images.load(components.Assets.images.backboard.backboardGameOver.keyName), images.load(components.Assets.images.googleWord.letter1.keyName), diff --git a/packages/pinball_components/assets/images/alien_bumper/a/active.png b/packages/pinball_components/assets/images/alien_bumper/a/active.png deleted file mode 100644 index 92943dfc..00000000 Binary files a/packages/pinball_components/assets/images/alien_bumper/a/active.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/alien_bumper/a/inactive.png b/packages/pinball_components/assets/images/alien_bumper/a/inactive.png deleted file mode 100644 index 99745fcf..00000000 Binary files a/packages/pinball_components/assets/images/alien_bumper/a/inactive.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/alien_bumper/a/off.png b/packages/pinball_components/assets/images/alien_bumper/a/off.png new file mode 100644 index 00000000..d693f1c1 Binary files /dev/null and b/packages/pinball_components/assets/images/alien_bumper/a/off.png differ diff --git a/packages/pinball_components/assets/images/alien_bumper/a/on.png b/packages/pinball_components/assets/images/alien_bumper/a/on.png new file mode 100644 index 00000000..4bb38a74 Binary files /dev/null and b/packages/pinball_components/assets/images/alien_bumper/a/on.png differ diff --git a/packages/pinball_components/assets/images/alien_bumper/b/active.png b/packages/pinball_components/assets/images/alien_bumper/b/active.png deleted file mode 100644 index ec7dc0cb..00000000 Binary files a/packages/pinball_components/assets/images/alien_bumper/b/active.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/alien_bumper/b/inactive.png b/packages/pinball_components/assets/images/alien_bumper/b/inactive.png deleted file mode 100644 index 23f7f4b7..00000000 Binary files a/packages/pinball_components/assets/images/alien_bumper/b/inactive.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/alien_bumper/b/off.png b/packages/pinball_components/assets/images/alien_bumper/b/off.png new file mode 100644 index 00000000..fd23693d Binary files /dev/null and b/packages/pinball_components/assets/images/alien_bumper/b/off.png differ diff --git a/packages/pinball_components/assets/images/alien_bumper/b/on.png b/packages/pinball_components/assets/images/alien_bumper/b/on.png new file mode 100644 index 00000000..fbfd36e1 Binary files /dev/null and b/packages/pinball_components/assets/images/alien_bumper/b/on.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/a/active.png b/packages/pinball_components/assets/images/dash/bumper/a/active.png index feeee11f..57330eb4 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/a/active.png and b/packages/pinball_components/assets/images/dash/bumper/a/active.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/a/inactive.png b/packages/pinball_components/assets/images/dash/bumper/a/inactive.png index 58ab8c56..aead95ec 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/a/inactive.png and b/packages/pinball_components/assets/images/dash/bumper/a/inactive.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/b/active.png b/packages/pinball_components/assets/images/dash/bumper/b/active.png index 4bc2897f..fe871847 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/b/active.png and b/packages/pinball_components/assets/images/dash/bumper/b/active.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/b/inactive.png b/packages/pinball_components/assets/images/dash/bumper/b/inactive.png index eddc7693..3d53b743 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/b/inactive.png and b/packages/pinball_components/assets/images/dash/bumper/b/inactive.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/main/active.png b/packages/pinball_components/assets/images/dash/bumper/main/active.png index bef56684..9508b56c 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/main/active.png and b/packages/pinball_components/assets/images/dash/bumper/main/active.png differ diff --git a/packages/pinball_components/assets/images/dash/bumper/main/inactive.png b/packages/pinball_components/assets/images/dash/bumper/main/inactive.png index e6f15b38..b1d0ae7d 100644 Binary files a/packages/pinball_components/assets/images/dash/bumper/main/inactive.png and b/packages/pinball_components/assets/images/dash/bumper/main/inactive.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/a/active.png b/packages/pinball_components/assets/images/sparky/bumper/a/active.png deleted file mode 100644 index 6e84d8ef..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/a/active.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/a/inactive.png b/packages/pinball_components/assets/images/sparky/bumper/a/inactive.png deleted file mode 100644 index 9157a73f..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/a/inactive.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/a/off.png b/packages/pinball_components/assets/images/sparky/bumper/a/off.png new file mode 100644 index 00000000..a81c7915 Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/a/off.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/a/on.png b/packages/pinball_components/assets/images/sparky/bumper/a/on.png new file mode 100644 index 00000000..81a91a52 Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/a/on.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/b/active.png b/packages/pinball_components/assets/images/sparky/bumper/b/active.png deleted file mode 100644 index 02371ce1..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/b/active.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/b/inactive.png b/packages/pinball_components/assets/images/sparky/bumper/b/inactive.png deleted file mode 100644 index 20b4f092..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/b/inactive.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/b/off.png b/packages/pinball_components/assets/images/sparky/bumper/b/off.png new file mode 100644 index 00000000..0eac905c Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/b/off.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/b/on.png b/packages/pinball_components/assets/images/sparky/bumper/b/on.png new file mode 100644 index 00000000..a00f3f33 Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/b/on.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/c/active.png b/packages/pinball_components/assets/images/sparky/bumper/c/active.png deleted file mode 100644 index 85748375..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/c/active.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/c/inactive.png b/packages/pinball_components/assets/images/sparky/bumper/c/inactive.png deleted file mode 100644 index b5b3584d..00000000 Binary files a/packages/pinball_components/assets/images/sparky/bumper/c/inactive.png and /dev/null differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/c/off.png b/packages/pinball_components/assets/images/sparky/bumper/c/off.png new file mode 100644 index 00000000..50a69d54 Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/c/off.png differ diff --git a/packages/pinball_components/assets/images/sparky/bumper/c/on.png b/packages/pinball_components/assets/images/sparky/bumper/c/on.png new file mode 100644 index 00000000..265f35aa Binary files /dev/null and b/packages/pinball_components/assets/images/sparky/bumper/c/on.png differ diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index f45543b0..5fe50882 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -236,25 +236,25 @@ class $AssetsImagesSparkyGen { class $AssetsImagesAlienBumperAGen { const $AssetsImagesAlienBumperAGen(); - /// File path: assets/images/alien_bumper/a/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/alien_bumper/a/active.png'); + /// File path: assets/images/alien_bumper/a/off.png + AssetGenImage get off => + const AssetGenImage('assets/images/alien_bumper/a/off.png'); - /// File path: assets/images/alien_bumper/a/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/alien_bumper/a/inactive.png'); + /// File path: assets/images/alien_bumper/a/on.png + AssetGenImage get on => + const AssetGenImage('assets/images/alien_bumper/a/on.png'); } class $AssetsImagesAlienBumperBGen { const $AssetsImagesAlienBumperBGen(); - /// File path: assets/images/alien_bumper/b/active.png - AssetGenImage get active => - const AssetGenImage('assets/images/alien_bumper/b/active.png'); + /// File path: assets/images/alien_bumper/b/off.png + AssetGenImage get off => + const AssetGenImage('assets/images/alien_bumper/b/off.png'); - /// File path: assets/images/alien_bumper/b/inactive.png - AssetGenImage get inactive => - const AssetGenImage('assets/images/alien_bumper/b/inactive.png'); + /// File path: assets/images/alien_bumper/b/on.png + AssetGenImage get on => + const AssetGenImage('assets/images/alien_bumper/b/on.png'); } class $AssetsImagesDashBumperGen { @@ -309,8 +309,11 @@ class $AssetsImagesSparkyBumperGen { class $AssetsImagesSparkyComputerGen { const $AssetsImagesSparkyComputerGen(); + /// File path: assets/images/sparky/computer/base.png AssetGenImage get base => const AssetGenImage('assets/images/sparky/computer/base.png'); + + /// File path: assets/images/sparky/computer/top.png AssetGenImage get top => const AssetGenImage('assets/images/sparky/computer/top.png'); } @@ -354,28 +357,37 @@ class $AssetsImagesDashBumperMainGen { class $AssetsImagesSparkyBumperAGen { const $AssetsImagesSparkyBumperAGen(); - AssetGenImage get active => - const AssetGenImage('assets/images/sparky/bumper/a/active.png'); - AssetGenImage get inactive => - const AssetGenImage('assets/images/sparky/bumper/a/inactive.png'); + /// File path: assets/images/sparky/bumper/a/off.png + AssetGenImage get off => + const AssetGenImage('assets/images/sparky/bumper/a/off.png'); + + /// File path: assets/images/sparky/bumper/a/on.png + AssetGenImage get on => + const AssetGenImage('assets/images/sparky/bumper/a/on.png'); } class $AssetsImagesSparkyBumperBGen { const $AssetsImagesSparkyBumperBGen(); - AssetGenImage get active => - const AssetGenImage('assets/images/sparky/bumper/b/active.png'); - AssetGenImage get inactive => - const AssetGenImage('assets/images/sparky/bumper/b/inactive.png'); + /// File path: assets/images/sparky/bumper/b/off.png + AssetGenImage get off => + const AssetGenImage('assets/images/sparky/bumper/b/off.png'); + + /// File path: assets/images/sparky/bumper/a/on.png + AssetGenImage get on => + const AssetGenImage('assets/images/sparky/bumper/b/on.png'); } class $AssetsImagesSparkyBumperCGen { const $AssetsImagesSparkyBumperCGen(); - AssetGenImage get active => - const AssetGenImage('assets/images/sparky/bumper/c/active.png'); - AssetGenImage get inactive => - const AssetGenImage('assets/images/sparky/bumper/c/inactive.png'); + /// File path: assets/images/sparky/bumper/c/off.png + AssetGenImage get off => + const AssetGenImage('assets/images/sparky/bumper/c/off.png'); + + /// File path: assets/images/sparky/bumper/c/on.png + AssetGenImage get on => + const AssetGenImage('assets/images/sparky/bumper/c/on.png'); } class Assets {