diff --git a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart index b884410e..3f8f5b6d 100644 --- a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart +++ b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart @@ -12,28 +12,36 @@ class FlutterForestBonusBehavior extends Component super.onMount(); final bumpers = parent.children.whereType(); + final signpost = parent.firstChild()!; + final animatronic = parent.firstChild()!; + final canvas = gameRef.firstChild()!; + 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() - .add(const BonusActivated(GameBonus.dashNest)); - gameRef.firstChild()!.add( - ControlledBall.bonus(characterTheme: gameRef.characterTheme) - ..initialPosition = Vector2(17.2, -52.7), - ); - parent.firstChild()?.playing = true; - + if (activatedAllBumpers) { + signpost.bloc.onProgressed(); for (final bumper in bumpers) { bumper.bloc.onReset(); } + + if (signpost.bloc.state.isFullyLit()) { + gameRef + .read() + .add(const BonusActivated(GameBonus.dashNest)); + canvas.add( + ControlledBall.bonus(characterTheme: gameRef.characterTheme) + ..initialPosition = Vector2(17.2, -52.7), + ); + animatronic.playing = true; + signpost.bloc.onProgressed(); + } } }); } diff --git a/lib/game/view/pinball_game_page.dart b/lib/game/view/pinball_game_page.dart index be11a15c..6a36e687 100644 --- a/lib/game/view/pinball_game_page.dart +++ b/lib/game/view/pinball_game_page.dart @@ -141,7 +141,7 @@ class PinballGameLoadedView extends StatelessWidget { Positioned( top: 16, left: leftMargin, - child: const GameHud(), + child: Container(), //const GameHud(), ), ], ); diff --git a/packages/pinball_components/lib/src/components/signpost/behaviors/behaviors.dart b/packages/pinball_components/lib/src/components/signpost/behaviors/behaviors.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/pinball_components/lib/src/components/signpost/behaviors/sign_post_progressing_behavior.dart b/packages/pinball_components/lib/src/components/signpost/behaviors/sign_post_progressing_behavior.dart deleted file mode 100644 index 80c1cab8..00000000 --- a/packages/pinball_components/lib/src/components/signpost/behaviors/sign_post_progressing_behavior.dart +++ /dev/null @@ -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 { - @override - Future onLoad() async { - await super.onLoad(); - } -} diff --git a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart index 66972a5a..41c614ea 100644 --- a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart +++ b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart @@ -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 { SignpostCubit() : super(SignpostState.inactive); - void progress() { + void onProgressed() { final index = SignpostState.values.indexOf(state); emit( SignpostState.values[(index + 1) % SignpostState.values.length], diff --git a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_state.dart b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_state.dart index 0141ae06..6537f2bd 100644 --- a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_state.dart +++ b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_state.dart @@ -15,3 +15,7 @@ enum SignpostState { /// Signpost with all signs of lit up dashes. active3, } + +extension SignpostX on SignpostState { + bool isFullyLit() => this == SignpostState.active3; +} diff --git a/packages/pinball_components/lib/src/components/signpost/signpost.dart b/packages/pinball_components/lib/src/components/signpost/signpost.dart index 42d2c495..3f9b2aaa 100644 --- a/packages/pinball_components/lib/src/components/signpost/signpost.dart +++ b/packages/pinball_components/lib/src/components/signpost/signpost.dart @@ -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 - with HasGameRef { + with HasGameRef, ParentIsA { _SignpostSpriteComponent({ required SignpostState current, }) : super( @@ -60,6 +61,7 @@ class _SignpostSpriteComponent extends SpriteGroupComponent @override Future onLoad() async { await super.onLoad(); + parent.bloc.stream.listen((state) => current = state); final sprites = {}; this.sprites = sprites;