feat: added events for multiplier

pull/213/head
RuiAlonso 3 years ago
parent b81293c0a4
commit 1aac4cb0e3

@ -11,6 +11,8 @@ class GameBloc extends Bloc<GameEvent, GameState> {
GameBloc() : super(const GameState.initial()) { GameBloc() : super(const GameState.initial()) {
on<BallLost>(_onBallLost); on<BallLost>(_onBallLost);
on<Scored>(_onScored); on<Scored>(_onScored);
on<IncreasedMultiplier>(_onIncreasedMultiplier);
on<ResetMultiplier>(_onResetMultiplier);
on<BonusActivated>(_onBonusActivated); on<BonusActivated>(_onBonusActivated);
on<SparkyTurboChargeActivated>(_onSparkyTurboChargeActivated); on<SparkyTurboChargeActivated>(_onSparkyTurboChargeActivated);
} }
@ -21,7 +23,21 @@ class GameBloc extends Bloc<GameEvent, GameState> {
void _onScored(Scored event, Emitter emit) { void _onScored(Scored event, Emitter emit) {
if (!state.isGameOver) { if (!state.isGameOver) {
emit(state.copyWith(score: state.score + event.points)); emit(
state.copyWith(score: state.score + state.multiplier * event.points),
);
}
}
void _onIncreasedMultiplier(IncreasedMultiplier event, Emitter emit) {
if (!state.isGameOver) {
emit(state.copyWith(multiplier: state.multiplier + event.increase));
}
}
void _onResetMultiplier(ResetMultiplier event, Emitter emit) {
if (!state.isGameOver) {
emit(state.copyWith(multiplier: 1));
} }
} }

@ -48,3 +48,29 @@ class SparkyTurboChargeActivated extends GameEvent {
@override @override
List<Object?> get props => []; List<Object?> get props => [];
} }
/// {@template increased_multiplier_game_event}
/// Event added when multiplier is being increased.
/// {@endtemplate}
class IncreasedMultiplier extends GameEvent {
/// {@macro increased_multiplier_game_event}
const IncreasedMultiplier({
required this.increase,
}) : assert(increase > 0, 'Increase must be greater than 0');
final int increase;
@override
List<Object?> get props => [increase];
}
/// {@template reset_multiplier_game_event}
/// Event added when multiplier is reset.
/// {@endtemplate}
class ResetMultiplier extends GameEvent {
/// {@macro reset_multiplier_game_event}
const ResetMultiplier();
@override
List<Object?> get props => [];
}

@ -21,6 +21,7 @@ class GameState extends Equatable {
/// {@macro game_state} /// {@macro game_state}
const GameState({ const GameState({
required this.score, required this.score,
required this.multiplier,
required this.balls, required this.balls,
required this.bonusHistory, required this.bonusHistory,
}) : assert(score >= 0, "Score can't be negative"), }) : assert(score >= 0, "Score can't be negative"),
@ -28,12 +29,16 @@ class GameState extends Equatable {
const GameState.initial() const GameState.initial()
: score = 0, : score = 0,
multiplier = 1,
balls = 3, balls = 3,
bonusHistory = const []; bonusHistory = const [];
/// The current score of the game. /// The current score of the game.
final int score; final int score;
/// The current multiplier for the score.
final int multiplier;
/// The number of balls left in the game. /// The number of balls left in the game.
/// ///
/// When the number of balls is 0, the game is over. /// When the number of balls is 0, the game is over.
@ -48,6 +53,7 @@ class GameState extends Equatable {
GameState copyWith({ GameState copyWith({
int? score, int? score,
int? multiplier,
int? balls, int? balls,
List<GameBonus>? bonusHistory, List<GameBonus>? bonusHistory,
}) { }) {
@ -58,6 +64,7 @@ class GameState extends Equatable {
return GameState( return GameState(
score: score ?? this.score, score: score ?? this.score,
multiplier: multiplier ?? this.multiplier,
balls: balls ?? this.balls, balls: balls ?? this.balls,
bonusHistory: bonusHistory ?? this.bonusHistory, bonusHistory: bonusHistory ?? this.bonusHistory,
); );
@ -66,6 +73,7 @@ class GameState extends Equatable {
@override @override
List<Object?> get props => [ List<Object?> get props => [
score, score,
multiplier,
balls, balls,
bonusHistory, bonusHistory,
]; ];

Loading…
Cancel
Save