Select Git revision
game_cubit.dart
Benoît Harrault authored
game_cubit.dart 7.20 KiB
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:minehunter/models/game/cell.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/models/settings/settings_game.dart';
import 'package:minehunter/models/settings/settings_global.dart';
import 'package:minehunter/models/types.dart';
import 'package:minehunter/utils/tools.dart';
part 'game_state.dart';
class GameCubit extends HydratedCubit<GameState> {
GameCubit()
: super(GameState(
currentGame: Game.createEmpty(),
));
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,
// Base data
board: state.currentGame.board,
sizeHorizontal: state.currentGame.sizeHorizontal,
sizeVertical: state.currentGame.sizeVertical,
isBoardMined: state.currentGame.isBoardMined,
// Game data
minesCount: state.currentGame.minesCount,
reportMode: state.currentGame.reportMode,
gameWin: state.currentGame.gameWin,
gameFail: state.currentGame.gameFail,
);
// game.dump();
updateState(game);
}
void startNewGame({
required GameSettings gameSettings,
required GlobalSettings globalSettings,
}) {
final Game newGame = Game.createNew(
// Settings
gameSettings: gameSettings,
globalSettings: globalSettings,
);
newGame.dump();
updateState(newGame);
refresh();
}
void quitGame() {
state.currentGame.isRunning = false;
refresh();