diff options
Diffstat (limited to 'src/sdl/main.c')
-rw-r--r-- | src/sdl/main.c | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/src/sdl/main.c b/src/sdl/main.c index 40896e2..0d492a5 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -17,6 +17,8 @@ #include "sounds.h" #define WINDOW_TITLE "Pablotron Sokoban" +#define WINDOW_WIDTH 800 +#define WINDOW_HEIGHT 600 static TTF_Font * load_font( @@ -45,11 +47,34 @@ load_font( } static void +draw_to_fade_tex( + draw_ctx_t * const draw_ctx +) { + // set render target + if (SDL_SetRenderTarget(draw_ctx->renderer, draw_ctx->fade_tex)) { + die("SDL_SetRenderTarget(): %s", SDL_GetError()); + } + + // draw + draw(draw_ctx); + + // clear render target + if (SDL_SetRenderTarget(draw_ctx->renderer, NULL)) { + die("SDL_SetRenderTarget(): %s", SDL_GetError()); + } +} + +static void set_level( draw_ctx_t * const draw_ctx, sok_ctx_t * const ctx, const size_t level_num ) { + if (level_num) { + // draw current level to fade texture + draw_to_fade_tex(draw_ctx); + } + // get level data draw_ctx->level = levels_get_level(level_num); @@ -58,6 +83,11 @@ set_level( die("Couldn't load level %d", (int) level_num); } + if (level_num) { + // set fade ticks + draw_ctx->fade_ticks = SDL_GetTicks(); + } + // log level title SDL_Log( "Loaded level \"%s: %s\" (#%d)", @@ -167,8 +197,8 @@ int main(int argc, char *argv[]) { WINDOW_TITLE, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - 800, - 600, + WINDOW_WIDTH, + WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE ); @@ -198,8 +228,28 @@ int main(int argc, char *argv[]) { .zoom = &zoom, .theme = theme_get_default(), .bump_ticks = SDL_GetTicks() - 5000, + .fade_ticks = SDL_GetTicks() - 5000, }; + // create fade texture + draw_ctx.fade_tex = SDL_CreateTexture( + renderer, + SDL_PIXELFORMAT_RGBA32, + SDL_TEXTUREACCESS_TARGET, + WINDOW_WIDTH, + WINDOW_HEIGHT + ); + + // set fade texture blend mode + if (SDL_SetTextureBlendMode(draw_ctx.fade_tex, SDL_BLENDMODE_BLEND)) { + die("SDl_SetTextureBlendMode(): %s", SDL_GetError()); + } + + // check for error + if (!draw_ctx.fade_tex) { + die("SDL_CreateTexture(): %s", SDL_GetError()); + } + // set level set_level(&draw_ctx, &ctx, level_num); @@ -259,7 +309,7 @@ int main(int argc, char *argv[]) { case ACTION_NEXT: if (sok_ctx_is_done(&ctx)) { // play sound - sound_play(sounds, ASSET_SOUND_JUMP_0_WAV); + sound_play(sounds, ASSET_SOUND_POWERUP_1_WAV); // advance level level_num++; @@ -285,7 +335,7 @@ int main(int argc, char *argv[]) { case ACTION_WARP: if (warp_buf_get(&warp_buf, &level_num)) { // play sound - sound_play(sounds, ASSET_SOUND_JUMP_0_WAV); + sound_play(sounds, ASSET_SOUND_POWERUP_1_WAV); // load level set_level(&draw_ctx, &ctx, level_num); |