diff options
Diffstat (limited to 'src/sdl/draw.c')
-rw-r--r-- | src/sdl/draw.c | 66 |
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; } |