From 856dbde29399ce97b14ad604569e1a95ce9545fd Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 12 Oct 2018 21:23:26 +0200 Subject: [PATCH] added request dialog to play again after game is over without solving level --- src/game.c | 32 ++++++++++++++++++++++++++++++++ src/game.h | 1 + src/screens.c | 2 ++ 3 files changed, 35 insertions(+) diff --git a/src/game.c b/src/game.c index 5bfa71db..eed45977 100644 --- a/src/game.c +++ b/src/game.c @@ -14949,6 +14949,38 @@ void RequestRestartGame(char *message) } } +void CheckGameOver(void) +{ + static boolean last_game_over = FALSE; + static int game_over_delay = 0; + int game_over_delay_value = 50; + boolean game_over = checkGameFailed(); + + /* do not handle game over if request dialog is already active */ + if (game.request_active) + return; + + if (!game_over) + { + last_game_over = FALSE; + game_over_delay = game_over_delay_value; + + return; + } + + if (game_over_delay > 0) + { + game_over_delay--; + + return; + } + + if (last_game_over != game_over) + game.restart_game_message = "Game over! Play it again?"; + + last_game_over = game_over; +} + boolean checkGameSolved(void) { /* set for all game engines if level was solved */ diff --git a/src/game.h b/src/game.h index 5fab8390..bd26e264 100644 --- a/src/game.h +++ b/src/game.h @@ -417,6 +417,7 @@ void RaiseScoreElement(int); void RequestQuitGameExt(boolean, boolean, char *); void RequestQuitGame(boolean); void RequestRestartGame(char *); +void CheckGameOver(void); boolean checkGameSolved(void); boolean checkGameFailed(void); diff --git a/src/screens.c b/src/screens.c index 5900616f..ae4f7038 100644 --- a/src/screens.c +++ b/src/screens.c @@ -8211,6 +8211,8 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) void HandleGameActions(void) { + CheckGameOver(); + if (game.restart_game_message != NULL) RequestRestartGame(game.restart_game_message); -- 2.34.1