From 05d0d4a3cac0580d1d3c24732a12f85d10a890aa Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Wed, 4 May 2022 19:16:03 +0200 Subject: [PATCH] refactor: added ScoringBehavior on shot and bonus behaviors --- .../behaviors/ramp_bonus_behavior.dart | 19 ++++++++++++---- .../behaviors/ramp_shot_behavior.dart | 22 ++++++++++++++----- .../behaviors/ramp_bonus_behavior_test.dart | 16 ++++++-------- .../behaviors/ramp_shot_behavior_test.dart | 12 +++++----- 4 files changed, 44 insertions(+), 25 deletions(-) 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); }, );