refactor: added ScoringBehavior on shot and bonus behaviors

pull/296/head
RuiAlonso 3 years ago
parent eafdee4943
commit 05d0d4a3ca

@ -1,4 +1,7 @@
import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:pinball/game/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
@ -16,22 +19,30 @@ class RampBonusBehavior extends Component
final Points _points; final Points _points;
StreamSubscription? _subscription;
@override @override
void onMount() { void onMount() {
super.onMount(); super.onMount();
parent.bloc.stream.listen((state) { _subscription = parent.bloc.stream.listen((state) {
final achievedOneMillionPoints = state.hits % 10 == 0; final achievedOneMillionPoints = state.hits % 10 == 0;
if (achievedOneMillionPoints) { if (achievedOneMillionPoints) {
gameRef.read<GameBloc>().add(Scored(points: _points.value)); parent.add(
gameRef.add( ScoringBehavior(
ScoreComponent(
points: _points, points: _points,
position: Vector2(0, -60), position: Vector2(0, -60),
duration: 2,
), ),
); );
} }
}); });
} }
@override
void onRemove() {
_subscription?.cancel();
super.onRemove();
}
} }

@ -1,4 +1,7 @@
import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:pinball/game/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
@ -16,19 +19,20 @@ class RampShotBehavior extends Component
final Points _points; final Points _points;
StreamSubscription? _subscription;
@override @override
void onMount() { void onMount() {
super.onMount(); super.onMount();
parent.bloc.stream.listen((state) { _subscription = parent.bloc.stream.listen((state) {
final achievedOneMillionPoints = state.hits % 10 == 0; final achievedOneMillionPoints = state.hits % 10 == 0;
if (!achievedOneMillionPoints) { if (!achievedOneMillionPoints) {
gameRef.read<GameBloc>() gameRef.read<GameBloc>().add(const MultiplierIncreased());
..add(const MultiplierIncreased())
..add(Scored(points: _points.value)); parent.add(
gameRef.add( ScoringBehavior(
ScoreComponent(
points: _points, points: _points,
position: Vector2(0, -45), position: Vector2(0, -45),
), ),
@ -36,4 +40,10 @@ class RampShotBehavior extends Component
} }
}); });
} }
@override
void onRemove() {
_subscription?.cancel();
super.onRemove();
}
} }

@ -6,9 +6,11 @@ import 'package:bloc_test/bloc_test.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.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/components/android_acres/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
@ -72,15 +74,14 @@ void main() {
bloc: bloc, bloc: bloc,
); );
await game.ensureAdd(parent); await game.ensureAdd(ZCanvasComponent(children: [parent]));
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
streamController.add(SpaceshipRampState(hits: 10)); streamController.add(SpaceshipRampState(hits: 10));
final scores = game.descendants().whereType<ScoreComponent>(); final scores = game.descendants().whereType<ScoringBehavior>();
await game.ready(); await game.ready();
verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1);
expect(scores.length, 1); expect(scores.length, 1);
}, },
); );
@ -103,17 +104,14 @@ void main() {
bloc: bloc, bloc: bloc,
); );
await game.ensureAdd(parent); await game.ensureAdd(ZCanvasComponent(children: [parent]));
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
streamController.add( streamController.add(SpaceshipRampState(hits: 1));
SpaceshipRampState(hits: 1),
);
final scores = game.descendants().whereType<ScoreComponent>(); final scores = game.descendants().whereType<ScoringBehavior>();
await game.ready(); await game.ready();
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0); expect(scores.length, 0);
}, },
); );

@ -6,9 +6,11 @@ import 'package:bloc_test/bloc_test.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.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/components/android_acres/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
@ -72,16 +74,15 @@ void main() {
bloc: bloc, bloc: bloc,
); );
await game.ensureAdd(parent); await game.ensureAdd(ZCanvasComponent(children: [parent]));
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
streamController.add(SpaceshipRampState(hits: 1)); streamController.add(SpaceshipRampState(hits: 1));
final scores = game.descendants().whereType<ScoreComponent>(); final scores = game.descendants().whereType<ScoringBehavior>();
await game.ready(); await game.ready();
verify(() => gameBloc.add(MultiplierIncreased())).called(1); verify(() => gameBloc.add(MultiplierIncreased())).called(1);
verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1);
expect(scores.length, 1); expect(scores.length, 1);
}, },
); );
@ -104,16 +105,15 @@ void main() {
bloc: bloc, bloc: bloc,
); );
await game.ensureAdd(parent); await game.ensureAdd(ZCanvasComponent(children: [parent]));
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
streamController.add(SpaceshipRampState(hits: 10)); streamController.add(SpaceshipRampState(hits: 10));
final scores = game.descendants().whereType<ScoreComponent>(); final scores = game.children.whereType<ScoringBehavior>();
await game.ready(); await game.ready();
verifyNever(() => gameBloc.add(MultiplierIncreased())); verifyNever(() => gameBloc.add(MultiplierIncreased()));
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0); expect(scores.length, 0);
}, },
); );

Loading…
Cancel
Save