diff --git a/lib/game/components/android_acres/behaviors/ramp_bonus_behavior.dart b/lib/game/components/android_acres/behaviors/ramp_bonus_behavior.dart index 8ea764b1..598c9cc2 100644 --- a/lib/game/components/android_acres/behaviors/ramp_bonus_behavior.dart +++ b/lib/game/components/android_acres/behaviors/ramp_bonus_behavior.dart @@ -1,4 +1,7 @@ +import 'dart:async'; + import 'package:flame/components.dart'; +import 'package:pinball/game/behaviors/behaviors.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -16,22 +19,30 @@ class RampBonusBehavior extends Component final Points _points; + StreamSubscription? _subscription; + @override void onMount() { super.onMount(); - parent.bloc.stream.listen((state) { + _subscription = parent.bloc.stream.listen((state) { final achievedOneMillionPoints = state.hits % 10 == 0; if (achievedOneMillionPoints) { - gameRef.read().add(Scored(points: _points.value)); - gameRef.add( - ScoreComponent( + parent.add( + ScoringBehavior( points: _points, position: Vector2(0, -60), + duration: 2, ), ); } }); } + + @override + void onRemove() { + _subscription?.cancel(); + super.onRemove(); + } } diff --git a/lib/game/components/android_acres/behaviors/ramp_shot_behavior.dart b/lib/game/components/android_acres/behaviors/ramp_shot_behavior.dart index 956e4ec4..f8aa8581 100644 --- a/lib/game/components/android_acres/behaviors/ramp_shot_behavior.dart +++ b/lib/game/components/android_acres/behaviors/ramp_shot_behavior.dart @@ -1,4 +1,7 @@ +import 'dart:async'; + import 'package:flame/components.dart'; +import 'package:pinball/game/behaviors/behaviors.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -16,19 +19,20 @@ class RampShotBehavior extends Component final Points _points; + StreamSubscription? _subscription; + @override void onMount() { super.onMount(); - parent.bloc.stream.listen((state) { + _subscription = parent.bloc.stream.listen((state) { final achievedOneMillionPoints = state.hits % 10 == 0; if (!achievedOneMillionPoints) { - gameRef.read() - ..add(const MultiplierIncreased()) - ..add(Scored(points: _points.value)); - gameRef.add( - ScoreComponent( + gameRef.read().add(const MultiplierIncreased()); + + parent.add( + ScoringBehavior( points: _points, position: Vector2(0, -45), ), @@ -36,4 +40,10 @@ class RampShotBehavior extends Component } }); } + + @override + void onRemove() { + _subscription?.cancel(); + super.onRemove(); + } } diff --git a/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart b/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart index 3eab404c..fe1f8382 100644 --- a/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart +++ b/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart @@ -6,9 +6,11 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; +import 'package:pinball/game/behaviors/behaviors.dart'; import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; import '../../../../helpers/helpers.dart'; @@ -72,15 +74,14 @@ void main() { bloc: bloc, ); - await game.ensureAdd(parent); + await game.ensureAdd(ZCanvasComponent(children: [parent])); await parent.ensureAdd(behavior); streamController.add(SpaceshipRampState(hits: 10)); - final scores = game.descendants().whereType(); + final scores = game.descendants().whereType(); await game.ready(); - verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1); expect(scores.length, 1); }, ); @@ -103,17 +104,14 @@ void main() { bloc: bloc, ); - await game.ensureAdd(parent); + await game.ensureAdd(ZCanvasComponent(children: [parent])); await parent.ensureAdd(behavior); - streamController.add( - SpaceshipRampState(hits: 1), - ); + streamController.add(SpaceshipRampState(hits: 1)); - final scores = game.descendants().whereType(); + final scores = game.descendants().whereType(); await game.ready(); - verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); expect(scores.length, 0); }, ); diff --git a/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart b/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart index 78291274..47e83e1e 100644 --- a/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart +++ b/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart @@ -6,9 +6,11 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; +import 'package:pinball/game/behaviors/behaviors.dart'; import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; import '../../../../helpers/helpers.dart'; @@ -72,16 +74,15 @@ void main() { bloc: bloc, ); - await game.ensureAdd(parent); + await game.ensureAdd(ZCanvasComponent(children: [parent])); await parent.ensureAdd(behavior); streamController.add(SpaceshipRampState(hits: 1)); - final scores = game.descendants().whereType(); + final scores = game.descendants().whereType(); await game.ready(); verify(() => gameBloc.add(MultiplierIncreased())).called(1); - verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1); expect(scores.length, 1); }, ); @@ -104,16 +105,15 @@ void main() { bloc: bloc, ); - await game.ensureAdd(parent); + await game.ensureAdd(ZCanvasComponent(children: [parent])); await parent.ensureAdd(behavior); streamController.add(SpaceshipRampState(hits: 10)); - final scores = game.descendants().whereType(); + final scores = game.children.whereType(); await game.ready(); verifyNever(() => gameBloc.add(MultiplierIncreased())); - verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); expect(scores.length, 0); }, );