aboutsummaryrefslogtreecommitdiff
path: root/src/sdl/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdl/main.c')
-rw-r--r--src/sdl/main.c58
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);