aboutsummaryrefslogtreecommitdiff
path: root/src/sdl/draw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdl/draw.c')
-rw-r--r--src/sdl/draw.c66
1 files changed, 46 insertions, 20 deletions
diff --git a/src/sdl/draw.c b/src/sdl/draw.c
index 10d08ac..bf73129 100644
--- a/src/sdl/draw.c
+++ b/src/sdl/draw.c
@@ -2,6 +2,9 @@
#include "util.h" // warn()/die()
#include "color.h" // set_color()
#include "draw.h"
+#include "sprites.h"
+
+#undef DRAW_SPRITES
static size_t
get_cell_size(
@@ -25,6 +28,36 @@ get_cell_rect(
};
}
+static void
+draw_cell(
+ draw_ctx_t * const draw_ctx,
+ const sok_pos_t pos,
+ const sprite_t sprite
+) {
+ const SDL_Rect dst_rect = get_cell_rect(draw_ctx, pos);
+
+#ifdef DRAW_SPRITES
+ const SDL_Rect src_rect = sprites_get_rect(sprite);
+
+#if 0
+ SDL_Log(
+ "src_rect = { %d, %d, %d, %d }, dst_rect = { %d, %d, %d, %d }",
+ src_rect.x, src_rect.y, src_rect.w, src_rect.h,
+ dst_rect.x, dst_rect.y, dst_rect.w, dst_rect.h
+ );
+#endif /* 0 */
+
+ if (SDL_RenderCopy(draw_ctx->renderer, draw_ctx->sprites, &src_rect, &dst_rect)) {
+ die("SDL_RenderCopy(): %s", SDL_GetError());
+ }
+#else
+ if (SDL_RenderFillRect(draw_ctx->renderer, &dst_rect)) {
+ die("SDL_RenderFillRect(): %s", SDL_GetError());
+ }
+#endif /* DRAW_SPRITES */
+}
+
+
static bool
draw_on_size(
const sok_ctx_t * const ctx,
@@ -44,6 +77,15 @@ draw_on_size(
draw_ctx->render_ofs_x = (renderer_x - level_size.x * cell_size) / 2;
draw_ctx->render_ofs_y = (renderer_y - level_size.y * cell_size) / 2;
+#ifdef DRAW_SPRITES
+ for (size_t y = 0; y < level_size.y; y++) {
+ for (size_t x = 0; x < level_size.x; x++) {
+ const sok_pos_t pos = { x, y };
+ draw_cell(draw_ctx, pos, SPRITE_FLOOR);
+ }
+ }
+#endif /* DRAW_SPRITES */
+
return true;
}
@@ -65,12 +107,7 @@ draw_on_wall(
void * const data
) {
draw_ctx_t * const draw_ctx = data;
- const SDL_Rect rect = get_cell_rect(draw_ctx, pos);
-
- if (SDL_RenderFillRect(draw_ctx->renderer, &rect)) {
- die("SDL_RenderFillRect(): %s", SDL_GetError());
- }
-
+ draw_cell(draw_ctx, pos, SPRITE_WALL);
return true;
}
@@ -94,11 +131,8 @@ draw_on_goal(
void * const data
) {
draw_ctx_t * const draw_ctx = data;
- const SDL_Rect rect = get_cell_rect(draw_ctx, pos);
- if (SDL_RenderFillRect(draw_ctx->renderer, &rect)) {
- die("SDL_RenderFillRect(): %s", SDL_GetError());
- }
+ draw_cell(draw_ctx, pos, SPRITE_GOAL);
return true;
}
@@ -111,13 +145,9 @@ draw_on_home(
void * const data
) {
draw_ctx_t * const draw_ctx = data;
- const SDL_Rect rect = get_cell_rect(draw_ctx, pos);
set_color(draw_ctx->renderer, has_goal ? COLOR_HOME_GOAL : COLOR_HOME);
-
- if (SDL_RenderFillRect(draw_ctx->renderer, &rect)) {
- die("SDL_RenderFillRect(): %s", SDL_GetError());
- }
+ draw_cell(draw_ctx, pos, SPRITE_HOME);
return true;
}
@@ -130,13 +160,9 @@ draw_on_box(
void * const data
) {
draw_ctx_t * const draw_ctx = data;
- const SDL_Rect rect = get_cell_rect(draw_ctx, pos);
set_color(draw_ctx->renderer, has_goal ? COLOR_BOX_GOAL : COLOR_BOX);
-
- if (SDL_RenderFillRect(draw_ctx->renderer, &rect)) {
- die("SDL_RenderFillRect(): %s", SDL_GetError());
- }
+ draw_cell(draw_ctx, pos, SPRITE_BOX);
return true;
}