From 60388cb5de1d93636688cabfe84c18759c4d2141 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sat, 07 Aug 2021 16:50:47 -0400 Subject: game: Poll for events --- (limited to 'src') diff --git a/src/game.c b/src/game.c index bc43faa..0b546c0 100644 --- a/src/game.c +++ b/src/game.c @@ -55,6 +55,10 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer) SDL_Color form_color; SDL_Color text_color; struct mftk_window *win = NULL; + int fr; + Uint32 beg; + Uint32 end; + Uint32 delay; SDL_Event event; /* Create maze */ @@ -90,27 +94,31 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer) _mf_game_form(renderer, text_font, &text_color))); - while (SDL_WaitEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - goto quit; - case SDL_KEYDOWN: - switch (event.key.keysym.sym) { - case SDLK_ESCAPE: - goto exit; + fr = 30; + while(1) { + beg = SDL_GetTicks(); + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + goto quit; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case SDLK_ESCAPE: + goto exit; + default: + break; + } default: break; - } - default: - break; - } - switch (mftk_window_event(win, &event)) { - case 0: - break; - case 1: - goto exit; - default: - goto err; + } + switch (mftk_window_event(win, &event)) { + case 0: + break; + case 1: + goto exit; + default: + goto err; + } } SDL_SetRenderDrawColor(renderer, MF_COLOR_BACK_R, MF_COLOR_BACK_G, @@ -119,6 +127,18 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer) mf_maze_render(maze, renderer, &maze_color, MF_WINDOW_H / size); mftk_window_render(win, renderer); SDL_RenderPresent(renderer); + end = SDL_GetTicks(); + if ((Uint32) (1000 / fr) > (end - beg)) { + delay = 1000 / fr - (end - beg); + } else { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, + "Frame took longer than frame period"); + delay = 0; + } + SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, + "Frame took %u ms, delaying %u ms", + end - beg, delay); + SDL_Delay(delay); } exit: -- cgit v0.9.1