Select Git revision
build_application_resources.sh
game_cubit.dart 4.22 KiB
import 'dart:async';
import 'dart:math';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:sudoku/config/default_global_settings.dart';
import 'package:sudoku/models/cell.dart';
import 'package:sudoku/models/cell_location.dart';
import 'package:sudoku/models/game.dart';
import 'package:sudoku/models/settings_game.dart';
import 'package:sudoku/models/settings_global.dart';
import 'package:sudoku/utils/board_animate.dart';
part 'game_state.dart';
class GameCubit extends HydratedCubit<GameState> {
GameCubit()
: super(GameState(
game: Game.createNull(),
));
void updateState(Game game) {
emit(GameState(
game: game,
));
}
void refresh() {
updateState(Game(
gameSettings: state.game.gameSettings,
globalSettings: state.game.globalSettings,
board: state.game.board,
solvedBoard: state.game.solvedBoard,
isRunning: state.game.isRunning,
isFinished: state.game.isFinished,
blockSizeHorizontal: state.game.blockSizeHorizontal,
blockSizeVertical: state.game.blockSizeVertical,
boardSize: state.game.boardSize,
shuffledCellValues: state.game.shuffledCellValues,
boardConflicts: state.game.boardConflicts,
selectedCell: state.game.selectedCell,
showConflicts: state.game.showConflicts,
givenTipsCount: state.game.givenTipsCount,
buttonTipsCountdown: state.game.buttonTipsCountdown,
animationInProgress: state.game.animationInProgress,
boardAnimated: state.game.boardAnimated,
));
}
void startNewGame({
required GameSettings gameSettings,
required GlobalSettings globalSettings,
}) {
final Game newGame = Game.createNew(
gameSettings: gameSettings,
globalSettings: globalSettings,
);
newGame.dump();
updateState(newGame);
refresh();
BoardAnimate.startAnimation(this, 'start');
}
void selectCell(CellLocation location) {
state.game.selectedCell = state.game.board.get(location);