From a04251a007310b496d90e7b116da1d72a9b67c94 Mon Sep 17 00:00:00 2001 From: valentin carmona Date: Thu, 24 Mar 2022 11:27:59 +0100 Subject: [PATCH] block button undo / redo when not possible --- model.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/model.c b/model.c index a197431..aabc181 100644 --- a/model.c +++ b/model.c @@ -616,15 +616,19 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { env->pressed_redo = false; env->pressed_solve = false; } else if (SDL_PointInRect(&mouse, env->rec_undo)) { - env->pressed_undo = true; - env->pressed_restart = false; - env->pressed_redo = false; - env->pressed_solve = false; + if (!(env->g->hist == NULL || history_is_empty(history_prev(env->g->hist)))) { + env->pressed_undo = true; + env->pressed_restart = false; + env->pressed_redo = false; + env->pressed_solve = false; + } } else if (SDL_PointInRect(&mouse, env->rec_redo)) { - env->pressed_redo = true; - env->pressed_undo = false; - env->pressed_restart = false; - env->pressed_solve = false; + if (!(env->g->hist == NULL || history_next(env->g->hist) == NULL)) { + env->pressed_redo = true; + env->pressed_undo = false; + env->pressed_restart = false; + env->pressed_solve = false; + } } else if (SDL_PointInRect(&mouse, env->rec_solve)) { env->pressed_solve = true; env->pressed_undo = false; @@ -655,9 +659,13 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { if (SDL_PointInRect(&mouse, env->rec_restart)) { game_restart(env->g); } else if (SDL_PointInRect(&mouse, env->rec_undo)) { - game_undo(env->g); + if (env->pressed_undo == true) { + game_undo(env->g); + } } else if (SDL_PointInRect(&mouse, env->rec_redo)) { - game_redo(env->g); + if (env->pressed_redo == true) { + game_redo(env->g); + } } else if (SDL_PointInRect(&mouse, env->rec_solve)) { game_solve(env->g); } else if (SDL_PointInRect(&mouse, env->rec_game)) {