mirror of https://github.com/flutter/pinball.git
parent
1a39737cf6
commit
ada5ada264
@ -1,36 +1,27 @@
|
|||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'package:flame/components.dart';
|
import 'package:flame/components.dart';
|
||||||
import 'package:flame_bloc/flame_bloc.dart';
|
import 'package:flame_bloc/flame_bloc.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';
|
||||||
|
|
||||||
/// {@template ramp_multiplier_behavior}
|
|
||||||
/// Increases the multiplier when a [Ball] is shot 5 times into the
|
/// Increases the multiplier when a [Ball] is shot 5 times into the
|
||||||
/// [SpaceshipRamp].
|
/// [SpaceshipRamp].
|
||||||
/// {@endtemplate}
|
class RampMultiplierBehavior extends Component
|
||||||
class RampMultiplierBehavior extends Component {
|
with FlameBlocListenable<SpaceshipRampCubit, SpaceshipRampState> {
|
||||||
/// {@macro ramp_multiplier_behavior}
|
@override
|
||||||
RampMultiplierBehavior() : super();
|
bool listenWhen(
|
||||||
|
SpaceshipRampState previousState,
|
||||||
|
SpaceshipRampState newState,
|
||||||
|
) {
|
||||||
|
final hasChanged =
|
||||||
|
previousState.hits != newState.hits && newState.hits != 0;
|
||||||
|
final achievedFiveShots = newState.hits % 5 == 0;
|
||||||
|
final canIncrease = readBloc<GameBloc, GameState>().state.multiplier != 6;
|
||||||
|
return hasChanged && achievedFiveShots && canIncrease;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> onLoad() async {
|
void onNewState(SpaceshipRampState state) {
|
||||||
await super.onLoad();
|
readBloc<GameBloc, GameState>().add(const MultiplierIncreased());
|
||||||
await add(
|
|
||||||
FlameBlocListener<SpaceshipRampCubit, SpaceshipRampState>(
|
|
||||||
listenWhen: (previousState, newState) {
|
|
||||||
final hasChanged =
|
|
||||||
previousState.hits != newState.hits && newState.hits != 0;
|
|
||||||
final achievedFiveShots = newState.hits % 5 == 0;
|
|
||||||
final canIncrease =
|
|
||||||
readBloc<GameBloc, GameState>().state.multiplier != 6;
|
|
||||||
return hasChanged && achievedFiveShots && canIncrease;
|
|
||||||
},
|
|
||||||
onNewState: (state) {
|
|
||||||
readBloc<GameBloc, GameState>().add(const MultiplierIncreased());
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,43 +1,34 @@
|
|||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'package:flame/components.dart';
|
import 'package:flame/components.dart';
|
||||||
import 'package:flame_bloc/flame_bloc.dart';
|
import 'package:flame_bloc/flame_bloc.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';
|
||||||
|
|
||||||
/// {@template ramp_progress_behavior}
|
|
||||||
/// Changes arrow lit when a [Ball] is shot into the [SpaceshipRamp].
|
/// Changes arrow lit when a [Ball] is shot into the [SpaceshipRamp].
|
||||||
/// {@endtemplate}
|
class RampProgressBehavior extends Component
|
||||||
class RampProgressBehavior extends Component {
|
with FlameBlocListenable<SpaceshipRampCubit, SpaceshipRampState> {
|
||||||
/// {@macro ramp_progress_behavior}
|
@override
|
||||||
RampProgressBehavior() : super();
|
bool listenWhen(
|
||||||
|
SpaceshipRampState previousState,
|
||||||
|
SpaceshipRampState newState,
|
||||||
|
) {
|
||||||
|
return previousState.hits != newState.hits && newState.hits != 0;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> onLoad() async {
|
void onNewState(SpaceshipRampState state) {
|
||||||
await super.onLoad();
|
final gameBloc = readBloc<GameBloc, GameState>();
|
||||||
await add(
|
final spaceshipCubit = readBloc<SpaceshipRampCubit, SpaceshipRampState>();
|
||||||
FlameBlocListener<SpaceshipRampCubit, SpaceshipRampState>(
|
|
||||||
listenWhen: (previousState, newState) =>
|
|
||||||
previousState.hits != newState.hits && newState.hits != 0,
|
|
||||||
onNewState: (state) {
|
|
||||||
final gameBloc = readBloc<GameBloc, GameState>();
|
|
||||||
final spaceshipCubit =
|
|
||||||
readBloc<SpaceshipRampCubit, SpaceshipRampState>();
|
|
||||||
|
|
||||||
final canProgress = !gameBloc.state.isMaxMultiplier ||
|
final canProgress = !gameBloc.state.isMaxMultiplier ||
|
||||||
(gameBloc.state.isMaxMultiplier && !state.fullArrowLit);
|
(gameBloc.state.isMaxMultiplier && !state.fullArrowLit);
|
||||||
|
|
||||||
if (canProgress) {
|
if (canProgress) {
|
||||||
spaceshipCubit.onProgressed();
|
spaceshipCubit.onProgressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spaceshipCubit.state.fullArrowLit &&
|
if (spaceshipCubit.state.fullArrowLit && !gameBloc.state.isMaxMultiplier) {
|
||||||
!gameBloc.state.isMaxMultiplier) {
|
spaceshipCubit.onProgressed();
|
||||||
spaceshipCubit.onProgressed();
|
}
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in new issue