aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKikooDX <kikoodx@paranoici.org>2022-03-27 14:56:31 +0200
committerKikooDX <kikoodx@paranoici.org>2022-03-27 14:56:31 +0200
commitf2911ceebdef567e62f18b7037e85566ab10b4c2 (patch)
tree18f234b41ce7f2fb7b56370e7425f4d8a008571a
parent2cb24f14fabb1179b38476c8e6a45386a5ab05f0 (diff)
downloadlzy-f2911ceebdef567e62f18b7037e85566ab10b4c2.tar.gz
drawtileex
-rw-r--r--inc/lzy.h79
-rw-r--r--src/main.c5
2 files changed, 83 insertions, 1 deletions
diff --git a/inc/lzy.h b/inc/lzy.h
index b78ddb1..fedc82f 100644
--- a/inc/lzy.h
+++ b/inc/lzy.h
@@ -93,6 +93,8 @@ int LZY_DrawLine(int x0, int y0, int x1, int y1);
int LZY_DrawRect(int x, int y, unsigned int w, unsigned int h);
int LZY_DrawFillRect(int x, int y, unsigned int w, unsigned int h);
int LZY_DrawTile(unsigned int id, int x, int y);
+int LZY_DrawTileEx(unsigned int id, int x, int y, unsigned int w,
+ unsigned int h);
int LZY_DrawChar(unsigned char chr, int x, int y);
int LZY_DrawText(const char *text, int x, int y);
LZY_Music *LZY_MusicLoad(const char *path);
@@ -311,6 +313,41 @@ int LZY_DrawTile(unsigned int id, int x, int y) {
#endif
}
+int LZY_DrawTileEx(unsigned int id, int x, int y, unsigned int w,
+ unsigned int h) {
+#ifndef LZY_GINT_TILESET
+ LZY_UNUSED(id);
+ LZY_UNUSED(x);
+ LZY_UNUSED(y);
+ LZY_UNUSED(w);
+ LZY_UNUSED(h);
+ return -1;
+#else
+ extern bopti_image_t LZY_GINT_TILESET;
+ int ix, iy;
+
+ if (w * h == 0)
+ return -1;
+
+ x += draw_off_x;
+ y += draw_off_y;
+
+ ix = id % tset_width;
+ iy = id / tset_width;
+
+ if (ix >= (int)tset_width || ix + w - 1 >= tset_width ||
+ iy >= (int)tset_height || iy + h - 1 >= tset_height)
+ return -1;
+
+ ix *= LZY_TILE_SIZE;
+ iy *= LZY_TILE_SIZE;
+ dsubimage(x, y, &LZY_GINT_TILESET, ix, iy, w * LZY_TILE_SIZE,
+ h * LZY_TILE_SIZE, DIMAGE_NONE);
+
+ return 0;
+#endif
+}
+
int LZY_DrawChar(unsigned char chr, int x, int y) {
#ifndef LZY_GINT_FONT
LZY_UNUSED(chr);
@@ -776,6 +813,48 @@ int LZY_DrawTile(unsigned int id, int x, int y) {
return 0;
}
+int LZY_DrawTileEx(unsigned int id, int x, int y, unsigned int w,
+ unsigned int h) {
+ SDL_Rect src, dst;
+
+ if (w * h == 0) {
+ error = "tile size can't be 0";
+ return -1;
+ }
+
+ if (id >= (unsigned int)(tset_width * tset_height)) {
+ error = "id exceeds boundaries";
+ return -1;
+ }
+
+ src.x = id % tset_width;
+ src.y = id / tset_width;
+
+ if (src.x >= tset_width || src.x + w - 1 >= (unsigned int)tset_width ||
+ src.y >= tset_height ||
+ src.y + h - 1 >= (unsigned int)tset_height) {
+ error = "tile is not in tileset";
+ return -1;
+ }
+
+ src.x *= LZY_TILE_SIZE;
+ src.y *= LZY_TILE_SIZE;
+ src.w = w * LZY_TILE_SIZE;
+ src.h = h * LZY_TILE_SIZE;
+
+ dst.x = x;
+ dst.y = y;
+ dst.w = w * LZY_TILE_SIZE;
+ dst.h = h * LZY_TILE_SIZE;
+
+ if (SDL_RenderCopy(renderer, tset, &src, &dst) < 0) {
+ error = SDL_GetError();
+ return -1;
+ }
+
+ return 0;
+}
+
int LZY_DrawChar(unsigned char chr, int x, int y) {
const unsigned int id = (unsigned int)chr - LZY_FIRST_CHR;
SDL_Rect src, dst;
diff --git a/src/main.c b/src/main.c
index 8286b7f..584e725 100644
--- a/src/main.c
+++ b/src/main.c
@@ -46,7 +46,10 @@ int main(int argc, const char **argv) {
LZY_DrawLine(x, y, 0, 0);
/* draw player */
- LZY_DrawTile(1, x, y);
+ if (LZY_DrawTileEx(1, x, y, 3, 2))
+ LZY_Log(LZY_GetError());
+ if (LZY_DrawTile(1, x, y))
+ LZY_Log(LZY_GetError());
}
LZY_DrawEnd();
}