From a7c266ef1da9fe6a47c912d56752801133cfc9e0 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Tue, 26 Apr 2022 11:09:53 +0200 Subject: [PATCH] feat: multiplier controller --- .../components/controlled_multiplier.dart | 110 +++++++++++++----- lib/game/pinball_game.dart | 1 + 2 files changed, 79 insertions(+), 32 deletions(-) diff --git a/lib/game/components/controlled_multiplier.dart b/lib/game/components/controlled_multiplier.dart index 8b2b7d12..f25fcd02 100644 --- a/lib/game/components/controlled_multiplier.dart +++ b/lib/game/components/controlled_multiplier.dart @@ -1,6 +1,7 @@ +import 'dart:math' as math; import 'package:flame/components.dart'; +import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; -import 'package:pinball/game/pinball_game.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -10,40 +11,85 @@ import 'package:pinball_flame/pinball_flame.dart'; class MultipliersGroup extends Component with Controls<_MultipliersController>, HasGameRef { /// {@macro multipliers_group_component} - MultipliersGroup() - : super( - children: [ - MultiplierSpriteGroupComponent( - position: Vector2(-20, 0), - onAssetPath: Assets.images.multiplier.x2.active.keyName, - offAssetPath: Assets.images.multiplier.x2.inactive.keyName, - ), - MultiplierSpriteGroupComponent( - position: Vector2(20, -5), - onAssetPath: Assets.images.multiplier.x3.active.keyName, - offAssetPath: Assets.images.multiplier.x3.inactive.keyName, - ), - MultiplierSpriteGroupComponent( - position: Vector2(0, -15), - onAssetPath: Assets.images.multiplier.x4.active.keyName, - offAssetPath: Assets.images.multiplier.x4.inactive.keyName, - ), - MultiplierSpriteGroupComponent( - position: Vector2(-10, -25), - onAssetPath: Assets.images.multiplier.x5.active.keyName, - offAssetPath: Assets.images.multiplier.x5.inactive.keyName, - ), - MultiplierSpriteGroupComponent( - position: Vector2(10, -35), - onAssetPath: Assets.images.multiplier.x6.active.keyName, - offAssetPath: Assets.images.multiplier.x6.inactive.keyName, - ), - ], - ); + MultipliersGroup() : super() { + controller = _MultipliersController(this); + } + + late final Multiplier _x2multiplier; + + late final Multiplier _x3multiplier; + + late final Multiplier _x4multiplier; + + late final Multiplier _x5multiplier; + + late final Multiplier _x6multiplier; + + @override + Future onLoad() async { + await super.onLoad(); + + _x2multiplier = Multiplier( + value: 2, + position: Vector2(-19.5, -2), + rotation: -15 * math.pi / 180, + ); + + _x3multiplier = Multiplier( + value: 3, + position: Vector2(13, -9.5), + rotation: 15 * math.pi / 180, + ); + + _x4multiplier = Multiplier( + value: 4, + position: Vector2(0, -21), + ); + + _x5multiplier = Multiplier( + value: 5, + position: Vector2(-8.5, -28), + rotation: -3 * math.pi / 180, + ); + + _x6multiplier = Multiplier( + value: 6, + position: Vector2(10, -31), + rotation: 8 * math.pi / 180, + ); + + await addAll([ + _x2multiplier, + _x3multiplier, + _x4multiplier, + _x5multiplier, + _x6multiplier, + ]); + } } class _MultipliersController extends ComponentController - with HasGameRef { + with BlocComponent, HasGameRef { _MultipliersController(MultipliersGroup multipliersGroup) : super(multipliersGroup); + + @override + bool listenWhen(GameState? previousState, GameState newState) { + // TODO(ruimiguel): use here GameState.multiplier when merged + // https://github.com/VGVentures/pinball/pull/213. + return previousState?.score != newState.score; + } + + @override + void onNewState(GameState state) { + // TODO(ruimiguel): use here GameState.multiplier when merged + // https://github.com/VGVentures/pinball/pull/213. + final currentMultiplier = state.score.bitLength % 6 + 1; + + component._x2multiplier.toggle(currentMultiplier); + component._x3multiplier.toggle(currentMultiplier); + component._x4multiplier.toggle(currentMultiplier); + component._x5multiplier.toggle(currentMultiplier); + component._x6multiplier.toggle(currentMultiplier); + } } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 55a6b23a..89eb4686 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -55,6 +55,7 @@ class PinballGame extends Forge2DGame final launcher = Launcher(); unawaited(addFromBlueprint(launcher)); unawaited(add(Board())); + unawaited(add(MultipliersGroup())); unawaited(add(AlienZone())); await addFromBlueprint(SparkyFireZone()); unawaited(addFromBlueprint(Slingshots()));