feat: implemented new FlutterForestBonus logic

pull/303/head
alestiago 3 years ago
parent 18de0d73d6
commit 93e1c71d2e

@ -12,28 +12,36 @@ class FlutterForestBonusBehavior extends Component
super.onMount();
final bumpers = parent.children.whereType<DashNestBumper>();
final signpost = parent.firstChild<Signpost>()!;
final animatronic = parent.firstChild<DashAnimatronic>()!;
final canvas = gameRef.firstChild<ZCanvasComponent>()!;
for (final bumper in bumpers) {
// TODO(alestiago): Refactor subscription management once the following is
// merged:
// https://github.com/flame-engine/flame/pull/1538
bumper.bloc.stream.listen((state) {
final achievedBonus = bumpers.every(
final activatedAllBumpers = bumpers.every(
(bumper) => bumper.bloc.state == DashNestBumperState.active,
);
if (achievedBonus) {
gameRef
.read<GameBloc>()
.add(const BonusActivated(GameBonus.dashNest));
gameRef.firstChild<ZCanvasComponent>()!.add(
ControlledBall.bonus(characterTheme: gameRef.characterTheme)
..initialPosition = Vector2(17.2, -52.7),
);
parent.firstChild<DashAnimatronic>()?.playing = true;
if (activatedAllBumpers) {
signpost.bloc.onProgressed();
for (final bumper in bumpers) {
bumper.bloc.onReset();
}
if (signpost.bloc.state.isFullyLit()) {
gameRef
.read<GameBloc>()
.add(const BonusActivated(GameBonus.dashNest));
canvas.add(
ControlledBall.bonus(characterTheme: gameRef.characterTheme)
..initialPosition = Vector2(17.2, -52.7),
);
animatronic.playing = true;
signpost.bloc.onProgressed();
}
}
});
}

@ -141,7 +141,7 @@ class PinballGameLoadedView extends StatelessWidget {
Positioned(
top: 16,
left: leftMargin,
child: const GameHud(),
child: Container(), //const GameHud(),
),
],
);

@ -1,10 +0,0 @@
import 'package:flame/components.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
class SignPostProgressingBehavior extends Component with ParentIsA<Signpost> {
@override
Future<void> onLoad() async {
await super.onLoad();
}
}

@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs
import 'package:bloc/bloc.dart';
part 'signpost_state.dart';
@ -5,7 +7,7 @@ part 'signpost_state.dart';
class SignpostCubit extends Cubit<SignpostState> {
SignpostCubit() : super(SignpostState.inactive);
void progress() {
void onProgressed() {
final index = SignpostState.values.indexOf(state);
emit(
SignpostState.values[(index + 1) % SignpostState.values.length],

@ -15,3 +15,7 @@ enum SignpostState {
/// Signpost with all signs of lit up dashes.
active3,
}
extension SignpostX on SignpostState {
bool isFullyLit() => this == SignpostState.active3;
}

@ -1,6 +1,7 @@
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
export 'cubit/signpost_cubit.dart';
@ -48,7 +49,7 @@ class Signpost extends BodyComponent with InitialPosition {
}
class _SignpostSpriteComponent extends SpriteGroupComponent<SignpostState>
with HasGameRef {
with HasGameRef, ParentIsA<Signpost> {
_SignpostSpriteComponent({
required SignpostState current,
}) : super(
@ -60,6 +61,7 @@ class _SignpostSpriteComponent extends SpriteGroupComponent<SignpostState>
@override
Future<void> onLoad() async {
await super.onLoad();
parent.bloc.stream.listen((state) => current = state);
final sprites = <SignpostState, Sprite>{};
this.sprites = sprites;

Loading…
Cancel
Save