diff options
author | KikooDX <kikoodx@paranoici.org> | 2022-03-02 23:32:07 +0100 |
---|---|---|
committer | KikooDX <kikoodx@paranoici.org> | 2022-03-02 23:32:28 +0100 |
commit | abad63970f31855b1d7b5cb3bfefa64bf556b53b (patch) | |
tree | da54bb68c62454ef98b87b7866ce97451ff046a0 | |
parent | 2665f29f72aa91d64c4d4b5d68f6366d1228b988 (diff) | |
download | lzy-abad63970f31855b1d7b5cb3bfefa64bf556b53b.tar.gz |
draw line
-rw-r--r-- | inc/lzy.h | 34 | ||||
-rw-r--r-- | src/main.c | 19 |
2 files changed, 49 insertions, 4 deletions
@@ -51,6 +51,7 @@ void LZY_DrawSetColor(uint8_t r, uint8_t g, uint8_t b); void LZY_DrawSetColorNone(void); int LZY_DrawClear(void); int LZY_DrawPoint(int x, int y); +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); @@ -128,6 +129,39 @@ enum LZY_ScanCode { #define LZY_FIRST_CHR ' ' #endif +int LZY_DrawLine(int x0, int y0, int x1, int y1) { + int dx, dy, sx, sy, err, e2; + int rc = 0; + + dx = x1 - x0; + dx = (dx < 0) ? (-dx) : (dx); + dy = y1 - y0; + dy = (dy < 0) ? (dy) : (-dy); + sx = (x0 < x1) ? (1) : (-1); + sy = (y0 < y1) ? (1) : (-1); + err = dx + dy; + + for (;;) { + if (LZY_DrawPoint(x0, y0)) + rc = -1; + + if (x0 == x1 && y0 == y1) + break; + + e2 = 2 * err; + if (e2 >= dy) { + err += dy; + x0 += sx; + } + if (e2 <= dx) { + err += dx; + y0 += sy; + } + } + + return rc; +} + #ifdef FXCG50 #include <gint/cpu.h> #include <gint/display.h> @@ -27,16 +27,18 @@ int main(void) { LZY_MusicPlay(music, 0); do { + const int speed = 2; + /* update */ LZY_CycleEvents(); if (LZY_KeyDown(LZYK_LEFT)) - x--; + x -= speed; if (LZY_KeyDown(LZYK_RIGHT)) - x++; + x += speed; if (LZY_KeyDown(LZYK_UP)) - y--; + y -= speed; if (LZY_KeyDown(LZYK_DOWN)) - y++; + y += speed; /* draw */ LZY_DrawBegin(); @@ -58,6 +60,15 @@ int main(void) { } static void draw_player(int x, int y) { + const int cx = x + 8; + const int cy = y + 8; + if (LZY_DrawTile(14, x, y)) LZY_Log(LZY_GetError()); + + LZY_DrawSetColor(0x00, 0xff, 0xff); + LZY_DrawLine(0, 0, cx - 1, cy - 1); + LZY_DrawLine(395, 0, cx, cy - 1); + LZY_DrawLine(0, 223, cx - 1, cy); + LZY_DrawLine(395, 223, cx, cy); } |