diff options
author | kdx <kikoodx@paranoici.org> | 2022-09-06 14:23:37 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2022-09-06 14:23:37 +0200 |
commit | 92a6aaa7e0e30b4e75242953ae7244768cb13a38 (patch) | |
tree | 529e5d82d13e9f7870604cfc5701e65d871c8d2c | |
parent | a85d878031755ef21dfc45637dc4130bc40f3fc7 (diff) | |
download | lzr-92a6aaa7e0e30b4e75242953ae7244768cb13a38.tar.gz |
draw tile
-rw-r--r-- | demo.c | 11 | ||||
-rw-r--r-- | lzr.c | 32 | ||||
-rw-r--r-- | lzr.h | 1 | ||||
-rw-r--r-- | tset.bmp | bin | 0 -> 24714 bytes |
4 files changed, 38 insertions, 6 deletions
@@ -1,18 +1,14 @@ #include "lzr.h" #include <dx/log.h> #include <stdbool.h> -#include <stdlib.h> -#include <time.h> int main(void) { LZR_Config cfg = {400, 224, 60, 16, "LZR demo"}; if (LZR_Init(cfg)) return 1; - srand(time(NULL)); - const int limit = 1 + (rand() & 15); - for (int i = 0; i < limit; i++) - LZR_ImageLoad("coucou.bmp"); + LZR_ImageLoad("coucou.bmp"); + LZR_ImageLoad("tset.bmp"); float darkness = 0.0f; float dark_dir = 1.0f; int x = 10; @@ -45,6 +41,9 @@ int main(void) LZR_DrawBegin(); LZR_DrawSetColor(0.9f, 0.9f, 0.8f); LZR_DrawClear(); + LZR_DrawSetColor(1.0f, 1.0f, 1.0f); + LZR_DrawTile(1, 2, 2, 2); + LZR_DrawTile(1, 4, 22, 2); const float shade = 0.9 * (0.5f + darkness); LZR_DrawSetColor(shade, shade, 0.0f); LZR_DrawImageEx(0, x, y, &stg); @@ -362,3 +362,35 @@ int LZR_DrawImageEx(int id, int x, int y, const LZR_ImageDrawSettings *stg) } return 0; } + +int LZR_DrawTile(int id, int tile, int x, int y) +{ + if (id < 0) { + dx_log_error("id is negative"); + return -1; + } + if (id >= LZR_MAX_IMAGES || images[id].tex == NULL) { + dx_log_error("no image with id %d", id); + return -1; + } + if (tile < 0) { + dx_log_error("tile is negative"); + return -1; + } + const int img_width = images[id].width / config.tile_size; + const int img_height = images[id].height / config.tile_size; + if (tile >= img_width * img_height) { + dx_log_error("tile exceeds boundaries"); + return -1; + } + SDL_Rect src; + src.x = (tile % img_width) * config.tile_size; + src.y = (tile / img_width) * config.tile_size; + src.w = config.tile_size, src.h = config.tile_size; + const SDL_Rect dst = {x, y, config.tile_size, config.tile_size}; + if (SDL_RenderCopy(renderer, images[id].tex, &src, &dst) < 0) { + dx_log_error("%s", SDL_GetError()); + return -1; + } + return 0; +} @@ -55,5 +55,6 @@ int LZR_DrawLine(int x0, int y0, int x1, int y1); int LZR_DrawRect(bool fill, int x, int y, int w, int h); int LZR_DrawImage(int id, int x, int y); int LZR_DrawImageEx(int id, int x, int y, const LZR_ImageDrawSettings *stg); +int LZR_DrawTile(int id, int tile, int x, int y); #endif diff --git a/tset.bmp b/tset.bmp Binary files differnew file mode 100644 index 0000000..28290f8 --- /dev/null +++ b/tset.bmp |