From 54e43c60192e9e329c7d418710e2886a6d5d203f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Tue, 30 Apr 2024 13:30:04 +0200 Subject: [PATCH] Restore "delete/resume" saved game --- android/gradle.properties | 4 +-- assets/icons/button_delete_saved_game.png | Bin 0 -> 5813 bytes assets/icons/button_resume_game.png | Bin 0 -> 3659 bytes .../metadata/android/en-US/changelogs/69.txt | 1 + .../metadata/android/fr-FR/changelogs/69.txt | 1 + icons/build_game_icons.sh | 2 ++ icons/button_delete_saved_game.svg | 2 ++ icons/button_resume_game.svg | 2 ++ lib/cubit/game_cubit.dart | 13 +++++++++ lib/models/game.dart | 5 ++++ lib/ui/screens/screen_parameters.dart | 14 +++++++-- lib/ui/skeleton.dart | 6 +++- lib/ui/widgets/button_delete_saved_game.dart | 27 ++++++++++++++++++ lib/ui/widgets/button_resume_saved_game.dart | 27 ++++++++++++++++++ pubspec.yaml | 2 +- 15 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 assets/icons/button_delete_saved_game.png create mode 100644 assets/icons/button_resume_game.png create mode 100644 fastlane/metadata/android/en-US/changelogs/69.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/69.txt create mode 100644 icons/button_delete_saved_game.svg create mode 100644 icons/button_resume_game.svg create mode 100644 lib/ui/widgets/button_delete_saved_game.dart create mode 100644 lib/ui/widgets/button_resume_saved_game.dart diff --git a/android/gradle.properties b/android/gradle.properties index 5a0756c..6da1d1a 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.1.19 -app.versionCode=68 +app.versionName=0.1.20 +app.versionCode=69 diff --git a/assets/icons/button_delete_saved_game.png b/assets/icons/button_delete_saved_game.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4f217689b11e444b7163557d7e5d68f3bbfe7d GIT binary patch literal 5813 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 literal 0 HcmV?d00001 diff --git a/assets/icons/button_resume_game.png b/assets/icons/button_resume_game.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ea0a02d05e42377eb551a4b51428b511a32f5d GIT binary patch literal 3659 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 literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/changelogs/69.txt b/fastlane/metadata/android/en-US/changelogs/69.txt new file mode 100644 index 0000000..63b5271 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/69.txt @@ -0,0 +1 @@ +Restore delete/resume saved game. diff --git a/fastlane/metadata/android/fr-FR/changelogs/69.txt b/fastlane/metadata/android/fr-FR/changelogs/69.txt new file mode 100644 index 0000000..72a200e --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/69.txt @@ -0,0 +1 @@ +Restauration de la suppression ou reprise de partie sauvegardée. diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh index 03cd74f..e079a34 100755 --- a/icons/build_game_icons.sh +++ b/icons/build_game_icons.sh @@ -18,6 +18,8 @@ ICON_SIZE=192 AVAILABLE_GAME_IMAGES=" button_back button_start + button_resume_game + button_delete_saved_game button_help button_show_conflicts game_win diff --git a/icons/button_delete_saved_game.svg b/icons/button_delete_saved_game.svg new file mode 100644 index 0000000..ac7eefe --- /dev/null +++ b/icons/button_delete_saved_game.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#ee7d49" stroke="#fff" stroke-width=".238"/><path d="m61.07 35.601-1.7399 27.837c-0.13442 2.1535-1.9205 3.8312-4.0781 3.8312h-16.84c-2.1576 0-3.9437-1.6777-4.0781-3.8312l-1.7399-27.837h-2.6176c-0.84621 0-1.5323-0.68613-1.5323-1.5323 0-0.84655 0.68613-1.5323 1.5323-1.5323h33.711c0.84621 0 1.5323 0.68578 1.5323 1.5323 0 0.84621-0.68613 1.5323-1.5323 1.5323zm-3.2617 0h-21.953l1.4715 26.674c0.05985 1.0829 0.95531 1.9305 2.0403 1.9305h14.929c1.085 0 1.9804-0.84757 2.0403-1.9305zm-10.977 3.0647c0.78977 0 1.4301 0.6403 1.4301 1.4301v19.614c0 0.78977-0.6403 1.4301-1.4301 1.4301s-1.4301-0.6403-1.4301-1.4301v-19.614c0-0.78977 0.6403-1.4301 1.4301-1.4301zm-6.1293 0c0.80004 0 1.4588 0.62935 1.495 1.4286l0.89647 19.719c0.03182 0.70016-0.50998 1.2933-1.2101 1.3255-0.01915 7.02e-4 -0.03831 1e-3 -0.05781 1e-3 -0.74462 0-1.3596-0.58215-1.4003-1.3261l-1.0757-19.719c-0.0407-0.74701 0.53188-1.3852 1.2786-1.4259 0.02462-0.0014 0.04926-2e-3 0.07388-2e-3zm12.259 0c0.74804 0 1.3541 0.60609 1.3541 1.3541 0 0.02462-3.28e-4 0.04926-0.0017 0.07388l-1.0703 19.618c-0.04379 0.80106-0.70597 1.4281-1.5081 1.4281-0.74804 0-1.3541-0.60609-1.3541-1.3541 0-0.02462 3.49e-4 -0.04925 0.0017-0.07388l1.0703-19.618c0.04379-0.80106 0.70597-1.4281 1.5081-1.4281zm-10.216-12.259h8.1728c2.2567 0 4.086 1.8293 4.086 4.086v2.0433h-16.344v-2.0433c0-2.2567 1.8293-4.086 4.086-4.086zm0.20453 3.0647c-0.67725 0-1.2259 0.54863-1.2259 1.2259v1.8388h10.215v-1.8388c0-0.67725-0.54863-1.2259-1.2259-1.2259z" fill="#fff" fill-rule="evenodd" stroke="#bd4812" stroke-width=".75383"/></svg> diff --git a/icons/button_resume_game.svg b/icons/button_resume_game.svg new file mode 100644 index 0000000..6ad8b64 --- /dev/null +++ b/icons/button_resume_game.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#49a1ee" stroke="#fff" stroke-width=".238"/><path d="m39.211 31.236c-0.84086-0.84489-2.9911-0.84489-2.9911 0v34.329c0 0.84594 2.1554 0.84594 2.9993 0l28.178-15.637c0.84392-0.84086 0.85812-2.2091 0.01623-3.053z" fill="#fefeff" stroke="#105ca1" stroke-linecap="round" stroke-linejoin="round" stroke-width="6.1726"/><path d="m40.355 33.714c-0.71948-0.72294-2.5594-0.72294-2.5594 0v29.373c0 0.72383 1.8442 0.72383 2.5663 0l24.11-13.38c0.7221-0.71948 0.73426-1.8902 0.01389-2.6124z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.225"/><path d="m28.369 66.919v-37.591" fill="#105ca2" stroke="#105ca2" stroke-linecap="round" stroke-width="4.0337"/></svg> diff --git a/lib/cubit/game_cubit.dart b/lib/cubit/game_cubit.dart index 3f29efd..bb663d0 100644 --- a/lib/cubit/game_cubit.dart +++ b/lib/cubit/game_cubit.dart @@ -34,6 +34,7 @@ class GameCubit extends HydratedCubit<GameState> { board: state.game.board, solvedBoard: state.game.solvedBoard, isRunning: state.game.isRunning, + isStarted: state.game.isStarted, isFinished: state.game.isFinished, blockSizeHorizontal: state.game.blockSizeHorizontal, blockSizeVertical: state.game.blockSizeVertical, @@ -86,6 +87,7 @@ class GameCubit extends HydratedCubit<GameState> { isFixed: false, ), ); + state.game.isStarted = true; refresh(); } @@ -125,6 +127,17 @@ class GameCubit extends HydratedCubit<GameState> { refresh(); } + void resumeSavedGame() { + state.game.isRunning = true; + refresh(); + } + + void deleteSavedGame() { + state.game.isRunning = false; + state.game.isFinished = true; + refresh(); + } + void updateAnimationInProgress(bool animationInProgress) { state.game.animationInProgress = animationInProgress; refresh(); diff --git a/lib/models/game.dart b/lib/models/game.dart index 3ae9cc9..74bc3b4 100644 --- a/lib/models/game.dart +++ b/lib/models/game.dart @@ -19,6 +19,7 @@ class Game { required this.board, required this.solvedBoard, required this.isRunning, + required this.isStarted, required this.isFinished, this.shuffledCellValues = const [], this.boardConflicts = const [], @@ -37,6 +38,7 @@ class Game { final GlobalSettings globalSettings; bool isRunning = false; + bool isStarted = false; bool isFinished = false; int blockSizeVertical = 0; @@ -65,6 +67,7 @@ class Game { solvedBoard: Board.createEmpty(), shuffledCellValues: [], isRunning: false, + isStarted: false, isFinished: false, givenTipsCount: 0, blockSizeHorizontal: 0, @@ -133,6 +136,7 @@ class Game { board: board, solvedBoard: solvedBoard, isRunning: true, + isStarted: false, isFinished: false, boardConflicts: nonConflictedBoard, shuffledCellValues: shuffledCellValues, @@ -384,6 +388,7 @@ class Game { printlog(' shuffledCellValues: $shuffledCellValues'); printlog(''); printlog(' isRunning: $isRunning'); + printlog(' isStarted: $isStarted'); printlog(' isFinished: $isFinished'); printlog(' selectedCell: ${selectedCell?.toString() ?? ''}'); printlog(' showConflicts: $showConflicts'); diff --git a/lib/ui/screens/screen_parameters.dart b/lib/ui/screens/screen_parameters.dart index fe20130..ff6e2ab 100644 --- a/lib/ui/screens/screen_parameters.dart +++ b/lib/ui/screens/screen_parameters.dart @@ -6,11 +6,15 @@ import 'package:sudoku/config/default_global_settings.dart'; import 'package:sudoku/cubit/settings_game_cubit.dart'; import 'package:sudoku/cubit/settings_global_cubit.dart'; import 'package:sudoku/ui/painters/parameter_painter.dart'; +import 'package:sudoku/ui/widgets/button_delete_saved_game.dart'; import 'package:sudoku/ui/widgets/button_game_start_new.dart'; +import 'package:sudoku/ui/widgets/button_resume_saved_game.dart'; import 'package:sudoku/ui/widgets/parameter_image.dart'; class ScreenParameters extends StatelessWidget { - const ScreenParameters({super.key}); + const ScreenParameters({super.key, required this.canResume}); + + final bool canResume; final double separatorHeight = 8.0; @@ -32,7 +36,13 @@ class ScreenParameters extends StatelessWidget { } lines.add(SizedBox(height: separatorHeight)); - lines.add(const Expanded(child: StartNewGameButton())); + lines.add(Expanded( + child: canResume ? const ResumeSavedGameButton() : const StartNewGameButton(), + )); + lines.add(SizedBox.square( + dimension: MediaQuery.of(context).size.width / 4, + child: canResume ? const DeleteSavedGameButton() : const SizedBox.shrink(), + )); lines.add(SizedBox(height: separatorHeight)); // Global settings diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart index 2b450ca..2bfdbfe 100644 --- a/lib/ui/skeleton.dart +++ b/lib/ui/skeleton.dart @@ -22,7 +22,11 @@ class SkeletonScreen extends StatelessWidget { ), child: BlocBuilder<GameCubit, GameState>( builder: (BuildContext context, GameState gameState) { - return gameState.game.isRunning ? const ScreenGame() : const ScreenParameters(); + return gameState.game.isRunning + ? const ScreenGame() + : ScreenParameters( + canResume: gameState.game.isStarted && !gameState.game.isFinished, + ); }, ), ), diff --git a/lib/ui/widgets/button_delete_saved_game.dart b/lib/ui/widgets/button_delete_saved_game.dart new file mode 100644 index 0000000..fa18bce --- /dev/null +++ b/lib/ui/widgets/button_delete_saved_game.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import 'package:sudoku/cubit/game_cubit.dart'; + +class DeleteSavedGameButton extends StatelessWidget { + const DeleteSavedGameButton({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder<GameCubit, GameState>( + builder: (BuildContext context, GameState gameState) { + final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); + + return TextButton( + child: const Image( + image: AssetImage('assets/icons/button_delete_saved_game.png'), + fit: BoxFit.fill, + ), + onPressed: () { + gameCubit.deleteSavedGame(); + }, + ); + }, + ); + } +} diff --git a/lib/ui/widgets/button_resume_saved_game.dart b/lib/ui/widgets/button_resume_saved_game.dart new file mode 100644 index 0000000..316a318 --- /dev/null +++ b/lib/ui/widgets/button_resume_saved_game.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import 'package:sudoku/cubit/game_cubit.dart'; + +class ResumeSavedGameButton extends StatelessWidget { + const ResumeSavedGameButton({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder<GameCubit, GameState>( + builder: (BuildContext context, GameState gameState) { + final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); + + return TextButton( + child: const Image( + image: AssetImage('assets/icons/button_resume_game.png'), + fit: BoxFit.fill, + ), + onPressed: () { + gameCubit.resumeSavedGame(); + }, + ); + }, + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 6c79d6b..fca46c7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A sudoku game application. publish_to: 'none' -version: 0.1.19+68 +version: 0.1.20+69 environment: sdk: '^3.0.0' -- GitLab