69 lines
1.9 KiB
Dart
69 lines
1.9 KiB
Dart
import '../../core/config/app_constants.dart';
|
|
import '../entities/pokemon.dart';
|
|
|
|
/// Phase courante de la partie.
|
|
enum GameStatus { loading, playing, roundWon, gameOver, error }
|
|
|
|
/// Résultat d'une soumission de réponse.
|
|
enum GuessResult { correct, wrong, gameOver, invalid }
|
|
|
|
/// État immuable d'une partie.
|
|
class GameState {
|
|
final Pokemon? currentPokemon;
|
|
final int lives;
|
|
final int skips;
|
|
final int hints;
|
|
final int sessionCorrectCount;
|
|
final int currentScore;
|
|
final int bestScore;
|
|
final bool isShiny;
|
|
final bool isHintUsed;
|
|
final GameStatus status;
|
|
|
|
const GameState({
|
|
this.currentPokemon,
|
|
this.lives = AppConstants.startingLives,
|
|
this.skips = AppConstants.startingSkips,
|
|
this.hints = AppConstants.startingHints,
|
|
this.sessionCorrectCount = 0,
|
|
this.currentScore = 0,
|
|
this.bestScore = 0,
|
|
this.isShiny = false,
|
|
this.isHintUsed = false,
|
|
this.status = GameStatus.loading,
|
|
});
|
|
|
|
GameState copyWith({
|
|
Pokemon? currentPokemon,
|
|
int? lives,
|
|
int? skips,
|
|
int? hints,
|
|
int? sessionCorrectCount,
|
|
int? currentScore,
|
|
int? bestScore,
|
|
bool? isShiny,
|
|
bool? isHintUsed,
|
|
GameStatus? status,
|
|
}) {
|
|
return GameState(
|
|
currentPokemon: currentPokemon ?? this.currentPokemon,
|
|
lives: lives ?? this.lives,
|
|
skips: skips ?? this.skips,
|
|
hints: hints ?? this.hints,
|
|
sessionCorrectCount: sessionCorrectCount ?? this.sessionCorrectCount,
|
|
currentScore: currentScore ?? this.currentScore,
|
|
bestScore: bestScore ?? this.bestScore,
|
|
isShiny: isShiny ?? this.isShiny,
|
|
isHintUsed: isHintUsed ?? this.isHintUsed,
|
|
status: status ?? this.status,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Issue d'un appel à GameEngine.submitGuess : nouvel état + nature du résultat.
|
|
class GuessOutcome {
|
|
final GameState state;
|
|
final GuessResult result;
|
|
const GuessOutcome(this.state, this.result);
|
|
}
|