From a198939e309e04a8ee8b9ec0f11f3a63647f98b3 Mon Sep 17 00:00:00 2001 From: valentin carmona Date: Tue, 22 Mar 2022 17:13:38 +0100 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mentation=20du=20process=20android?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 3 ++- model.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- model.h | 2 +- 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index bd9625c..36b395b 100644 --- a/main.c +++ b/main.c @@ -35,11 +35,12 @@ int main(int argc, char* argv[]) { /* main render loop */ SDL_Event e; bool quit = false; + SDL_Event prec_e; while (!quit) { /* manage events */ while (SDL_PollEvent(&e)) { /* process your events */ - quit = process(win, env, &e); + quit = process(win, env, &e, &prec_e); if (quit) break; } diff --git a/model.c b/model.c index 02f6e9c..56b4758 100644 --- a/model.c +++ b/model.c @@ -430,14 +430,88 @@ void ToggleFullscreen(SDL_Window* Window) { SDL_ShowCursor(IsFullscreen); } -bool process(SDL_Window* win, Env* env, SDL_Event* e) { +bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { int w, h; SDL_GetWindowSize(win, &w, &h); if (e->type == SDL_QUIT) { return true; } #ifdef _ANDROID_ + if (e->type == SDL_FINGERDOWN){ + SDL_Point coord; + coord.x = e->x; + coord.y = e->y; + if (SDL_PointInRect(&coord, env->rec_restart)) { + env->pressed_restart = true; + env->pressed_undo = false; + env->pressed_redo = false; + env->pressed_solve = false; + } else if (SDL_PointInRect(&coord, env->rec_undo)) { + env->pressed_undo = true; + env->pressed_restart = false; + env->pressed_redo = false; + env->pressed_solve = false; + } else if (SDL_PointInRect(&coord, env->rec_redo)) { + env->pressed_redo = true; + env->pressed_undo = false; + env->pressed_restart = false; + env->pressed_solve = false; + } else if (SDL_PointInRect(&coord, env->rec_solve)) { + env->pressed_solve = true; + env->pressed_undo = false; + env->pressed_redo = false; + env->pressed_restart = false; + } else if (SDL_PointInRect(&coord, env->rec_solve)) { + env->pressed_restart = false; + env->pressed_undo = false; + env->pressed_redo = false; + env->pressed_solve = false; + if(e->type != prec_e->type){ + prec_e->type = e->type; + prec_e->timestamp = e->timestamp; + } + } else { + env->pressed_restart = false; + env->pressed_undo = false; + env->pressed_redo = false; + env->pressed_solve = false; + } + }else if(e->type == SDL_FINGERUP){ + SDL_Point coord; + coord.x = e->x; + coord.y = e->y; + if (SDL_PointInRect(&coord, env->rec_restart)) { + game_restart(env->g); + } else if (SDL_PointInRect(&coord, env->rec_undo)) { + game_undo(env->g); + } else if (SDL_PointInRect(&coord, env->rec_redo)) { + game_redo(env->g); + } else if (SDL_PointInRect(&coord, env->rec_solve)) { + game_solve(env->g); + } else if (SDL_PointInRect(&coord, env->rec_game)) { + uint i = (((float)coord.y - (float)env->rec_game->y) / (float)env->rec_game->h * game_nb_rows(env->g)) - + 0.00001 /*to avoid if clicked exacly on the bottom right corner to result a 7*/; + uint j = (((float)coord.x - (float)env->rec_game->x) / (float)env->rec_game->w * game_nb_cols(env->g)) - + 0.00001 /*to avoid if clicked exacly on the bottom right corner to result a 7*/; + if ((e->timestamp - prec_e->timestamp) < 300) { + if (game_is_blank(env->g, i, j) || game_is_marked(env->g, i, j)) { + game_play_move(env->g, i, j, S_LIGHTBULB); + } else if (game_is_lightbulb(env->g, i, j)) { + game_play_move(env->g, i, j, S_BLANK); + } + } else { + if (game_is_blank(env->g, i, j) || game_is_lightbulb(env->g, i, j)) { + game_play_move(env->g, i, j, S_MARK); + } else if (game_is_marked(env->g, i, j)) { + game_play_move(env->g, i, j, S_BLANK); + } + } + } + } #else + if (prec_e != NULL){ + prec_e = NULL; + } if (e->type == SDL_MOUSEMOTION) { SDL_Point mouse; SDL_GetMouseState(&mouse.x, &mouse.y); diff --git a/model.h b/model.h index 056c8ce..cdd11c3 100644 --- a/model.h +++ b/model.h @@ -45,7 +45,7 @@ typedef struct Env_t Env; Env* init(SDL_Renderer* ren, int argc, char* argv[]); void render(SDL_Window* win, SDL_Renderer* ren, Env* env); void clean(Env* env); -bool process(SDL_Window* win, Env* env, SDL_Event* e); +bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e); /* **************************************************************** */