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_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<PinballGame> {
/// {@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<void> 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<MultipliersGroup>
with HasGameRef<PinballGame> {
with BlocComponent<GameBloc, GameState>, HasGameRef<PinballGame> {
_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);
}
}

@ -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()));

Loading…
Cancel
Save