import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/board_animate.dart'; import 'package:minehunter/utils/board_utils.dart'; class GameUtils { static Future<void> quitGame(Data myProvider) async { myProvider.updateGameIsRunning(false); if (BoardUtils.checkGameIsFinished(myProvider)) { myProvider.resetCurrentSavedState(); } } static void startNewGame(Data myProvider) { print('Starting game: ' + myProvider.parameterSize + ' - ' + myProvider.parameterLevel); myProvider.updateParameterSize(myProvider.parameterSize); myProvider.updateMinesCount(BoardUtils.getMinesCount( myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.parameterLevel)); myProvider.updateGameIsRunning(true); BoardUtils.createInitialEmptyBoard(myProvider); BoardAnimate.startAnimation(myProvider, 'start'); } static void deleteSavedGame(Data myProvider) { myProvider.resetCurrentSavedState(); } static void resumeSavedGame(Data myProvider) { Map<String, dynamic> savedState = myProvider.getCurrentSavedState(); if (savedState.isNotEmpty) { try { myProvider.setParameterValue('level', savedState['level']); myProvider.setParameterValue('size', savedState['size']); myProvider.setParameterValue('skin', savedState['skin']); myProvider.updateCells( BoardUtils.createBoardFromSavedState(myProvider, savedState['board'])); myProvider.updateGameIsRunning(true); } catch (e) { print('Failed to resume game. Will start new one instead.'); myProvider.resetCurrentSavedState(); myProvider.initParametersValues(); startNewGame(myProvider); } } else { myProvider.resetCurrentSavedState(); myProvider.initParametersValues(); startNewGame(myProvider); } } }