aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKikooDX <kikoodx@paranoici.org>2022-03-02 23:32:07 +0100
committerKikooDX <kikoodx@paranoici.org>2022-03-02 23:32:28 +0100
commitabad63970f31855b1d7b5cb3bfefa64bf556b53b (patch)
treeda54bb68c62454ef98b87b7866ce97451ff046a0
parent2665f29f72aa91d64c4d4b5d68f6366d1228b988 (diff)
downloadlzy-abad63970f31855b1d7b5cb3bfefa64bf556b53b.tar.gz
draw line
-rw-r--r--inc/lzy.h34
-rw-r--r--src/main.c19
2 files changed, 49 insertions, 4 deletions
diff --git a/inc/lzy.h b/inc/lzy.h
index 516c073..57d1ee7 100644
--- a/inc/lzy.h
+++ b/inc/lzy.h
@@ -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>
diff --git a/src/main.c b/src/main.c
index 452f9d4..4dc6607 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
}