feat: multiplier controller

pull/231/head
RuiAlonso 3 years ago
parent b6b3372b5b
commit a7c266ef1d

@ -1,6 +1,7 @@
import 'dart:math' as math;
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_bloc/flame_bloc.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball/game/pinball_game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
@ -10,40 +11,85 @@ import 'package:pinball_flame/pinball_flame.dart';
class MultipliersGroup extends Component class MultipliersGroup extends Component
with Controls<_MultipliersController>, HasGameRef<PinballGame> { with Controls<_MultipliersController>, HasGameRef<PinballGame> {
/// {@macro multipliers_group_component} /// {@macro multipliers_group_component}
MultipliersGroup() MultipliersGroup() : super() {
: super( controller = _MultipliersController(this);
children: [ }
MultiplierSpriteGroupComponent(
position: Vector2(-20, 0), late final Multiplier _x2multiplier;
onAssetPath: Assets.images.multiplier.x2.active.keyName,
offAssetPath: Assets.images.multiplier.x2.inactive.keyName, late final Multiplier _x3multiplier;
),
MultiplierSpriteGroupComponent( late final Multiplier _x4multiplier;
position: Vector2(20, -5),
onAssetPath: Assets.images.multiplier.x3.active.keyName, late final Multiplier _x5multiplier;
offAssetPath: Assets.images.multiplier.x3.inactive.keyName,
), late final Multiplier _x6multiplier;
MultiplierSpriteGroupComponent(
position: Vector2(0, -15), @override
onAssetPath: Assets.images.multiplier.x4.active.keyName, Future<void> onLoad() async {
offAssetPath: Assets.images.multiplier.x4.inactive.keyName, await super.onLoad();
),
MultiplierSpriteGroupComponent( _x2multiplier = Multiplier(
position: Vector2(-10, -25), value: 2,
onAssetPath: Assets.images.multiplier.x5.active.keyName, position: Vector2(-19.5, -2),
offAssetPath: Assets.images.multiplier.x5.inactive.keyName, rotation: -15 * math.pi / 180,
), );
MultiplierSpriteGroupComponent(
position: Vector2(10, -35), _x3multiplier = Multiplier(
onAssetPath: Assets.images.multiplier.x6.active.keyName, value: 3,
offAssetPath: Assets.images.multiplier.x6.inactive.keyName, 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<MultipliersGroup> class _MultipliersController extends ComponentController<MultipliersGroup>
with HasGameRef<PinballGame> { with BlocComponent<GameBloc, GameState>, HasGameRef<PinballGame> {
_MultipliersController(MultipliersGroup multipliersGroup) _MultipliersController(MultipliersGroup multipliersGroup)
: super(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);
}
} }

@ -55,6 +55,7 @@ class PinballGame extends Forge2DGame
final launcher = Launcher(); final launcher = Launcher();
unawaited(addFromBlueprint(launcher)); unawaited(addFromBlueprint(launcher));
unawaited(add(Board())); unawaited(add(Board()));
unawaited(add(MultipliersGroup()));
unawaited(add(AlienZone())); unawaited(add(AlienZone()));
await addFromBlueprint(SparkyFireZone()); await addFromBlueprint(SparkyFireZone());
unawaited(addFromBlueprint(Slingshots())); unawaited(addFromBlueprint(Slingshots()));

Loading…
Cancel
Save