diff options
Diffstat (limited to 'src/sdl/draw.c')
-rw-r--r-- | src/sdl/draw.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/sdl/draw.c b/src/sdl/draw.c index d95e83f..e980131 100644 --- a/src/sdl/draw.c +++ b/src/sdl/draw.c @@ -11,6 +11,7 @@ #define M_2_PI (2.0 * 3.1415926) #define BUMP_TIME 300 +#define FADE_TIME 200 static size_t get_cell_size( @@ -297,7 +298,6 @@ draw_solve_moves_text( draw_text(draw_ctx->renderer, draw_ctx->font, style, buf); } - static void draw_bg( draw_ctx_t * const draw_ctx @@ -320,6 +320,31 @@ draw_bg( SDL_RenderClear(draw_ctx->renderer); } +static void +draw_fade( + draw_ctx_t * const draw_ctx +) { + // check timestamp + if (SDL_TICKS_PASSED(draw_ctx->ticks, draw_ctx->fade_ticks + FADE_TIME)) { + return; + } + + // calculate alpha mod + const Uint32 delta = (draw_ctx->ticks - draw_ctx->fade_ticks); + const Uint8 alpha = 255 - 255.0 * delta / FADE_TIME; + + // set alpha mod + if (SDL_SetTextureAlphaMod(draw_ctx->fade_tex, alpha)) { + die("SDL_TextureSetAlphaMod(): %s", SDL_GetError()); + } + // SDL_Log("delta = %u, alpha = %d", delta, alpha); + + // draw texture + if (SDL_RenderCopy(draw_ctx->renderer, draw_ctx->fade_tex, NULL, NULL)) { + die("SDL_RenderCopy(): %s", SDL_GetError()); + } +} + void draw( draw_ctx_t * const draw_ctx @@ -340,6 +365,9 @@ draw( draw_solve_wait_text(draw_ctx); draw_solve_moves_text(draw_ctx); + // draw fade overlay + draw_fade(draw_ctx); + // flip SDL_RenderPresent(draw_ctx->renderer); } |