From 87f48bd0b00296d2e77596b005c670f77211a306 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Wed, 6 Apr 2022 11:31:06 +0200 Subject: [PATCH] refactor: separated dash bumper from generic bumper --- .../lib/src/components/bumper.dart | 57 ++++++++++++++ .../lib/src/components/components.dart | 1 + .../lib/src/components/dash_nest_bumper.dart | 76 ++++--------------- 3 files changed, 71 insertions(+), 63 deletions(-) create mode 100644 packages/pinball_components/lib/src/components/bumper.dart diff --git a/packages/pinball_components/lib/src/components/bumper.dart b/packages/pinball_components/lib/src/components/bumper.dart new file mode 100644 index 00000000..4bc40f56 --- /dev/null +++ b/packages/pinball_components/lib/src/components/bumper.dart @@ -0,0 +1,57 @@ +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/pinball_components.dart'; + +/// {@template bumper} +/// Generic bumper. +/// {@endtemplate} +abstract class Bumper extends BodyComponent with InitialPosition { + /// {@macro bumper} + Bumper({ + required String activeAssetPath, + required String inactiveAssetPath, + required SpriteComponent spriteComponent, + }) : _activeAssetPath = activeAssetPath, + _inactiveAssetPath = inactiveAssetPath, + _spriteComponent = spriteComponent; + + final String _activeAssetPath; + late final Sprite _activeSprite; + final String _inactiveAssetPath; + late final Sprite _inactiveSprite; + final SpriteComponent _spriteComponent; + + Future _loadSprites() async { + // TODO(alestiago): I think ideally we would like to do: + // Sprite(path).load so we don't require to store the activeAssetPath and + // the inactive assetPath. + _inactiveSprite = await gameRef.loadSprite(_inactiveAssetPath); + _activeSprite = await gameRef.loadSprite(_activeAssetPath); + } + + /// Activates the [Bumper]. + void activate() { + _spriteComponent + ..sprite = _activeSprite + ..size = _activeSprite.originalSize / 10; + } + + /// Deactivates the [Bumper]. + void deactivate() { + _spriteComponent + ..sprite = _inactiveSprite + ..size = _inactiveSprite.originalSize / 10; + } + + @override + Future onLoad() async { + await super.onLoad(); + await _loadSprites(); + + // TODO(erickzanardo): Look into using onNewState instead. + // Currently doing: onNewState(gameRef.read()) will throw an + // `Exception: build context is not available yet` + deactivate(); + await add(_spriteComponent); + } +} diff --git a/packages/pinball_components/lib/src/components/components.dart b/packages/pinball_components/lib/src/components/components.dart index bf578ea7..579aca4f 100644 --- a/packages/pinball_components/lib/src/components/components.dart +++ b/packages/pinball_components/lib/src/components/components.dart @@ -3,6 +3,7 @@ export 'baseboard.dart'; export 'board_dimensions.dart'; export 'board_side.dart'; export 'boundaries.dart'; +export 'bumper.dart'; export 'chrome_dino.dart'; export 'dash_nest_bumper.dart'; export 'dino_walls.dart'; diff --git a/packages/pinball_components/lib/src/components/dash_nest_bumper.dart b/packages/pinball_components/lib/src/components/dash_nest_bumper.dart index 447b4156..5086444e 100644 --- a/packages/pinball_components/lib/src/components/dash_nest_bumper.dart +++ b/packages/pinball_components/lib/src/components/dash_nest_bumper.dart @@ -4,65 +4,13 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -/// {@template dash_nest_bumper} -/// Bumper with a nest appearance. +/// {@template big_dash_nest_bumper} +/// Bumper with a Dash above it. /// {@endtemplate} -abstract class DashNestBumper extends BodyComponent with InitialPosition { - /// {@macro dash_nest_bumper} - DashNestBumper._({ - required String activeAssetPath, - required String inactiveAssetPath, - required SpriteComponent spriteComponent, - }) : _activeAssetPath = activeAssetPath, - _inactiveAssetPath = inactiveAssetPath, - _spriteComponent = spriteComponent; - - final String _activeAssetPath; - late final Sprite _activeSprite; - final String _inactiveAssetPath; - late final Sprite _inactiveSprite; - final SpriteComponent _spriteComponent; - - Future _loadSprites() async { - // TODO(alestiago): I think ideally we would like to do: - // Sprite(path).load so we don't require to store the activeAssetPath and - // the inactive assetPath. - _inactiveSprite = await gameRef.loadSprite(_inactiveAssetPath); - _activeSprite = await gameRef.loadSprite(_activeAssetPath); - } - - /// Activates the [DashNestBumper]. - void activate() { - _spriteComponent - ..sprite = _activeSprite - ..size = _activeSprite.originalSize / 10; - } - - /// Deactivates the [DashNestBumper]. - void deactivate() { - _spriteComponent - ..sprite = _inactiveSprite - ..size = _inactiveSprite.originalSize / 10; - } - - @override - Future onLoad() async { - await super.onLoad(); - await _loadSprites(); - - // TODO(erickzanardo): Look into using onNewState instead. - // Currently doing: onNewState(gameRef.read()) will throw an - // `Exception: build context is not available yet` - deactivate(); - await add(_spriteComponent); - } -} - -/// {@macro dash_nest_bumper} -class BigDashNestBumper extends DashNestBumper { - /// {@macro dash_nest_bumper} +class BigDashNestBumper extends Bumper { + /// {@macro big_dash_nest_bumper} BigDashNestBumper() - : super._( + : super( activeAssetPath: Assets.images.dashBumper.main.active.keyName, inactiveAssetPath: Assets.images.dashBumper.main.inactive.keyName, spriteComponent: SpriteComponent( @@ -88,20 +36,22 @@ class BigDashNestBumper extends DashNestBumper { } } -/// {@macro dash_nest_bumper} -class SmallDashNestBumper extends DashNestBumper { - /// {@macro dash_nest_bumper} +/// {@template small_dash_nest_bumper} +/// Bumper with a nest appearance. +/// {@endtemplate} +class SmallDashNestBumper extends Bumper { + /// {@macro small_dash_nest_bumper} SmallDashNestBumper._({ required String activeAssetPath, required String inactiveAssetPath, required SpriteComponent spriteComponent, - }) : super._( + }) : super( activeAssetPath: activeAssetPath, inactiveAssetPath: inactiveAssetPath, spriteComponent: spriteComponent, ); - /// {@macro dash_nest_bumper} + /// {@macro small_dash_nest_bumper} SmallDashNestBumper.a() : this._( activeAssetPath: Assets.images.dashBumper.a.active.keyName, @@ -112,7 +62,7 @@ class SmallDashNestBumper extends DashNestBumper { ), ); - /// {@macro dash_nest_bumper} + /// {@macro small_dash_nest_bumper} SmallDashNestBumper.b() : this._( activeAssetPath: Assets.images.dashBumper.b.active.keyName,