Select Git revision
-
Benoît Harrault authoredBenoît Harrault authored
game_cubit.dart 3.84 KiB
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hangman/data/fetch_data_helper.dart';
import 'package:hangman/models/game/picked_word.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:hangman/models/game/game.dart';
import 'package:hangman/models/settings/settings_game.dart';
import 'package:hangman/models/settings/settings_global.dart';
part 'game_state.dart';
class GameCubit extends HydratedCubit<GameState> {
GameCubit()
: super(GameState(
currentGame: Game.createNull(),
));
void updateState(Game game) {
emit(GameState(
currentGame: game,
));
}
void refresh() {
final Game game = Game(
// Settings
gameSettings: state.currentGame.gameSettings,
globalSettings: state.currentGame.globalSettings,
// State
isRunning: state.currentGame.isRunning,
isStarted: state.currentGame.isStarted,
isFinished: state.currentGame.isFinished,
animationInProgress: state.currentGame.animationInProgress,
gettingSecretWord: state.currentGame.gettingSecretWord,
// Base data
secretWord: state.currentGame.secretWord,
clue: state.currentGame.clue,
// Game data
hiddenWord: state.currentGame.hiddenWord,
usedLetters: state.currentGame.usedLetters,
errorsCount: state.currentGame.errorsCount,
isClueDisplayed: state.currentGame.isClueDisplayed,
);
// game.dump();
updateState(game);
}
void startNewGame({
required GameSettings gameSettings,
required GlobalSettings globalSettings,
}) {
final Game newGame = Game.createNew(
// Settings
gameSettings: gameSettings,
globalSettings: globalSettings,
);
updateState(newGame);
refresh();
FetchDataHelper().pickRandomWord(gameSettings).then((PickedWord pickedWord) {
state.currentGame.gettingSecretWord = false;
state.currentGame.secretWord = pickedWord.word;
state.currentGame.clue = pickedWord.clue;
state.currentGame.hiddenWord = List<String>.generate(pickedWord.word.length, (i) => '_');
state.currentGame.dump();
refresh();