feat: arrow behaviors

pull/416/head
RuiAlonso 3 years ago
parent 221d055a1e
commit 2abd29d46f

@ -10,7 +10,7 @@ class AppBlocObserver extends BlocObserver {
@override
void onChange(BlocBase bloc, Change change) {
super.onChange(bloc, change);
log('onChange(${bloc.runtimeType}, $change)');
//log('onChange(${bloc.runtimeType}, $change)');
}
@override

@ -23,6 +23,8 @@ class AndroidAcres extends Component {
children: [
RampShotBehavior(points: Points.fiveThousand),
RampBonusBehavior(points: Points.oneMillion),
RampProgressBehavior(),
RampMultiplierBehavior(),
],
),
SpaceshipRail(),

@ -1,4 +1,5 @@
export 'android_spaceship_bonus_behavior.dart';
export 'ramp_bonus_behavior.dart';
export 'ramp_multiplier_behavior.dart';
export 'ramp_progress_behavior.dart';
export 'ramp_shot_behavior.dart';

@ -0,0 +1,58 @@
import 'dart:async';
import 'package:flame/components.dart';
import 'package:flame_bloc/flame_bloc.dart';
import 'package:flutter/material.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
/// {@template ramp_multiplier_behavior}
/// Increases the multiplier when a [Ball] is shot 5 times into the
/// [SpaceshipRamp].
/// {@endtemplate}
class RampMultiplierBehavior extends Component
with ParentIsA<SpaceshipRamp>, FlameBlocReader<GameBloc, GameState> {
/// {@macro ramp_multiplier_behavior}
RampMultiplierBehavior() : super();
/// Creates a [RampMultiplierBehavior].
///
/// This can be used for testing [RampMultiplierBehavior] in isolation.
@visibleForTesting
RampMultiplierBehavior.test({
required this.subscription,
}) : super();
/// Subscription to [SpaceshipRampState] at [SpaceshipRamp].
@visibleForTesting
StreamSubscription? subscription;
@override
void onMount() {
super.onMount();
var previousState = const SpaceshipRampState.initial();
subscription = subscription ??
parent.bloc.stream.listen((state) {
final listenWhen =
previousState.hits != state.hits && state.hits != 0;
if (listenWhen) {
final achievedFiveShots = state.hits % 5 == 0;
if (achievedFiveShots) {
bloc.add(const MultiplierIncreased());
}
previousState = state;
}
});
}
@override
void onRemove() {
subscription?.cancel();
super.onRemove();
}
}

@ -31,29 +31,33 @@ class RampProgressBehavior extends Component
void onMount() {
super.onMount();
final spaceshipRamp = parent.children.whereType<SpaceshipRamp>().first;
var previousState = const SpaceshipRampState.initial();
subscription = subscription ??
parent.bloc.stream.listen((state) {
print("STATE $state");
final listenWhen =
previousState.hits != state.hits && state.hits != 0;
if (listenWhen) {
var fullArrowLit = spaceshipRamp.bloc.isFullyProgressed();
var fullArrowLit = parent.bloc.isFullyProgressed();
var isMaxMultiplier = bloc.state.multiplier == 6;
final canProgress =
!isMaxMultiplier || (isMaxMultiplier && !fullArrowLit);
print("fullArrowLit $fullArrowLit");
print("isMaxMultiplier $isMaxMultiplier");
print("canProgress $canProgress");
if (canProgress) {
spaceshipRamp.bloc.onProgressed();
print("onProgressed");
parent.bloc.onProgressed();
}
fullArrowLit = spaceshipRamp.bloc.isFullyProgressed();
fullArrowLit = parent.bloc.isFullyProgressed();
isMaxMultiplier = bloc.state.multiplier == 6;
if (fullArrowLit && !isMaxMultiplier) {
spaceshipRamp.bloc.onAnimate();
print("onAnimate");
parent.bloc.onAnimate();
}
previousState = state;

@ -44,8 +44,6 @@ class RampShotBehavior extends Component
final achievedOneMillionPoints = state.hits % 10 == 0;
if (!achievedOneMillionPoints) {
bloc.add(const MultiplierIncreased());
parent.add(
ScoringBehavior(
points: _points,

Loading…
Cancel
Save