Browse Source

Cleanup

main
Devine Lu Linvega 6 years ago
parent
commit
29b6cf4c3e
  1. 178
      nasu6.c

178
nasu6.c

@ -24,7 +24,8 @@ typedef struct Brush {
static int SCREEN_WIDTH = 512;
static int SCREEN_HEIGHT = 512;
static int FPS = 30;
int ZOOM = 1;
int ZOOM = 4;
int clr = 0xFF0000;
uint32_t* pixels;
@ -44,63 +45,17 @@ setpt(Point* p, int x, int y)
/* noodle */
int
patt(int mode, int size, Point p)
{
if(mode == 1)
return ((p.x + p.y) % 4) == 0 && ((p.y - p.x) % 4) == 0;
if(mode == 2)
return ((p.x + p.y) % 2) == 0 && ((p.y - p.x) % 2) == 0;
if(mode == 3)
return 1;
if(mode == 4)
return p.y % size == 0;
if(mode == 5)
return p.x % size == 0;
if(mode == 6)
return (p.x + p.y) % size == 0 || (p.x - p.y) % size == 0;
return 0;
}
void
pixel(uint32_t* dst, Point p, int color)
{
dst[p.y * SCREEN_WIDTH + p.x] = color;
}
void
line(uint32_t* dst, Point p0, Point p1, int color)
{
double dx = abs(p1.x - p0.x), sx = p0.x < p1.x ? 1 : -1;
double dy = -abs(p1.y - p0.y), sy = p0.y < p1.y ? 1 : -1;
double err = dx + dy, e2;
for(;;) {
pixel(dst, p0, color);
if(p0.x == p1.x && p0.y == p1.y)
break;
e2 = 2 * err;
if(e2 >= dy) {
err += dy;
p0.x += sx;
}
if(e2 <= dx) {
err += dx;
p0.y += sy;
}
}
}
void
fill(uint32_t* dst, int mode, int size, Point p0, int color)
pixel(uint32_t* dst, Point p, int c)
{
int x, y;
Point p;
for(x = 0; x < size; ++x)
for(y = 0; y < size; ++y) {
setpt(&p, p0.x + x, p0.y + y);
if(patt(mode, size, p))
pixel(dst, p, color);
p.x *= ZOOM;
p.y *= ZOOM;
for(x = 0; x < ZOOM; ++x) {
for(y = 0; y < ZOOM; ++y) {
dst[(p.y + y) * SCREEN_WIDTH + (p.x + x)] = c;
}
}
}
void export(uint32_t* dst)
@ -108,67 +63,6 @@ void export(uint32_t* dst)
/* TODO: chr file export */
}
void
title(Brush* b)
{
/* TODO: Format a title that includes brush mode, brush size, canvas size and offset */
printf("mode:%d size:%d\n", b->mode, b->size);
if(b->mode == 0)
SDL_SetWindowTitle(gWindow, "noodle(line)");
else if(b->mode == 1)
SDL_SetWindowTitle(gWindow, "noodle(tone1)");
else if(b->mode == 2)
SDL_SetWindowTitle(gWindow, "noodle(tone2)");
else if(b->mode == 3)
SDL_SetWindowTitle(gWindow, "noodle(full)");
else
SDL_SetWindowTitle(gWindow, "noodle(other)");
}
void
move(Point* p, int x, int y)
{
int req = 0;
if(p->x != x) {
setpt(p, x, p->y);
req = 1;
}
if(p->y != y) {
setpt(p, p->x, y);
req = 1;
}
/* TODO MOVE DRAWING
if(req)
debug(b);
*/
}
void
select(Brush* b, int m, int s)
{
int req = 0;
if(b->mode != m) {
b->mode = m;
req = 1;
}
if(b->size != s) {
b->size = s;
req = 1;
}
if(req)
title(b);
}
void
zoom(void)
{
}
void
clean(void)
{
}
/* SDL */
int
@ -258,10 +152,7 @@ handle_mouse(SDL_Event* event, Brush* b)
case SDL_MOUSEMOTION:
if(b->down) {
setpt(&b->pos, event->motion.x, event->motion.y);
if(b->mode == 0)
line(pixels, b->prev, b->pos, b->erase ? 0xffffff : 0x000000);
else
fill(pixels, b->mode, b->size, b->pos, b->erase ? 0xffffff : 0x000000);
pixel(pixels, b->pos, 0xFFFFFF);
setpt(&b->prev, b->pos.x, b->pos.y);
}
break;
@ -279,56 +170,18 @@ handle_keypress(SDL_Event* event, Brush* b, Point* o)
case SDLK_e:
export(pixels);
break;
/* move */
case SDLK_w:
move(o, o->x, o->y--);
break;
case SDLK_a:
move(o, o->x--, o->y);
break;
case SDLK_s:
move(o, o->x, o->y++);
break;
case SDLK_d:
move(o, o->x++, o->y);
break;
case SDLK_q:
move(o, 0, 0);
break;
/* Mode */
case SDLK_1:
select(b, 0, b->size);
clr = 0;
break;
case SDLK_2:
select(b, 1, b->size);
clr = 1;
break;
case SDLK_3:
select(b, 2, b->size);
clr = 2;
break;
case SDLK_4:
select(b, 3, b->size);
break;
case SDLK_5:
select(b, 4, b->size);
break;
case SDLK_6:
select(b, 5, b->size);
break;
case SDLK_7:
select(b, 6, b->size);
break;
/* brush */
case SDLK_z:
select(b, b->mode, b->size - 1);
break;
case SDLK_x:
select(b, b->mode, b->size + 1);
break;
/* Special */
case SDLK_BACKQUOTE:
zoom();
case SDLK_SPACE:
clean();
clr = 3;
break;
}
}
@ -404,9 +257,6 @@ main(int argc, char** argv)
load(f);
select(&brush, 0, 10);
move(&offset, 0, 0);
/* main game loop */
while(1) {

Loading…
Cancel
Save