~rabbits/orca-toy

880a1227bced99fdc4a10ba9dd05fc7735fa55e9 — neauoire 2 years ago b2a241d
Added block erase
3 files changed, 30 insertions(+), 29 deletions(-)

M README.md
M sim.c
M toy.c
M README.md => README.md +0 -4
@@ 45,10 45,6 @@ To display the list of operators inside of Orca, use `CmdOrCtrl+G`.
- `4` port(right)
- `5` port(output)

## TODOs

- Default values

## Notes

### SDL Mod Codes

M sim.c => sim.c +23 -13
@@ 60,7 60,7 @@ cchr(int v, int cap)
int
valid(Grid *g, int x, int y)
{
	return x >= 0 && x <= g->w && y >= 0 && y <= g->h;
	return x >= 0 && x <= g->w - 1 && y >= 0 && y <= g->h;
}

int


@@ 213,11 213,13 @@ opd(Grid *g, int x, int y, char c)
void
ope(Grid *g, int x, int y, char c)
{
	if(x == g->w || get(g, x + 1, y) != '.')
	if(!valid(g, x + 1, y) || get(g, x + 1, y) != '.')
		set(g, x, y, '*');
	else {
		set(g, x, y, '.');
		settype(g, x, y, 0);
		setport(g, x + 1, y, c);
		lock(g, x + 1, y);
	}
}



@@ 316,11 318,13 @@ opm(Grid *g, int x, int y, char c)
void
opn(Grid *g, int x, int y, char c)
{
	if(y == 0 || get(g, x, y - 1) != '.')
	if(!valid(g, x, y - 1) || get(g, x, y - 1) != '.')
		set(g, x, y, '*');
	else {
		set(g, x, y, '.');
		settype(g, x, y, 0);
		setport(g, x, y - 1, c);
		lock(g, x, y - 1);
	}
}



@@ 374,11 378,13 @@ opr(Grid *g, int x, int y, char c)
void
ops(Grid *g, int x, int y, char c)
{
	if(y == g->h || get(g, x, y + 1) != '.')
	if(!valid(g, x, y + 1) || get(g, x, y + 1) != '.')
		set(g, x, y, '*');
	else {
		set(g, x, y, '.');
		setport(g, x, y + 1, c);
		settype(g, x, y, 0);
		set(g, x, y + 1, c);
		lock(g, x, y + 1);
	}
}



@@ 421,11 427,13 @@ opv(Grid *g, int x, int y, char c)
void
opw(Grid *g, int x, int y, char c)
{
	if(x == 0 || get(g, x - 1, y) != '.')
	if(!valid(g, x - 1, y) || get(g, x - 1, y) != '.')
		set(g, x, y, '*');
	else {
		set(g, x, y, '.');
		settype(g, x, y, 0);
		setport(g, x - 1, y, c);
		lock(g, x - 1, y);
	}
}



@@ 434,7 442,8 @@ opx(Grid *g, int x, int y, char c)
{
	char px = getport(g, x - 2, y, 0);
	char py = getport(g, x - 1, y, 0);
	setport(g, x + cint(px), y + cint(py) + 1, getport(g, x + 1, y, 1));
	char val = getport(g, x + 1, y, 1);
	setport(g, x + cint(px), y + cint(py) + 1, val);
	(void)c;
}



@@ 454,12 463,13 @@ opy(Grid *g, int x, int y, char c)
void
opz(Grid *g, int x, int y, char c)
{
	int rate = cint(getport(g, x - 1, y, 0));
	char rate = getport(g, x - 1, y, 0);
	char target = getport(g, x + 1, y, 1);
	char val = cint(getport(g, x, y + 1, 1));
	int t = cint(target);
	int mod = val < t ? rate : val > t ? -rate : 0;
	setport(g, x, y + 1, cchr(val + mod, ciuc(target)));
	char val = getport(g, x, y + 1, 1);
	int rate_ = cint(rate);
	int target_ = cint(target);
	int val_ = cint(val);
	setport(g, x, y + 1, cchr(val_ + val_ < target_ ? rate_ : val_ > target_ ? -rate_ : 0, ciuc(target)));
	(void)c;
}



@@ 492,6 502,7 @@ opspecial(Grid *g, int x, int y)
void
operate(Grid *g, int x, int y, char c)
{
	settype(g, x, y, 3);
	switch(clca(c)) {
	case 'a': opa(g, x, y, c); break;
	case 'b': opb(g, x, y, c); break;


@@ 523,7 534,6 @@ operate(Grid *g, int x, int y, char c)
	case '#': opcomment(g, x, y); break;
	default: opspecial(g, x, y);
	}
	settype(g, x, y, 3);
}

/* General */

M toy.c => toy.c +7 -12
@@ 36,7 36,6 @@ SDL_Texture *gTexture = NULL;
uint32_t *pixels;

Rect2d selection;

Grid g;

Point2d


@@ 71,7 70,12 @@ selected(int x, int y)
void
insert(char c)
{
	set(&g, selection.x, selection.y, c);
	int x, y;
	for(x = 0; x < selection.w; ++x) {
		for(y = 0; y < selection.h; ++y) {
			set(&g, selection.x + x, selection.y + y, c);
		}
	}
}

/* misc */


@@ 230,12 234,10 @@ domouse(SDL_Event *event)
		8);
	switch(event->type) {
	case SDL_MOUSEBUTTONUP:
		printf("mouse-up\n");
		select(selection.x, selection.y, touch.x / 8 - selection.x + 1, touch.y / 8 - selection.y + 1);
		break;
	case SDL_MOUSEBUTTONDOWN:
		printf("%d,%d\n", touch.x / 8, touch.y / 8);
		select(touch.x / 8, touch.y / 8, 1, 1);
		printf("mouse-down\n");
		break;
	case SDL_MOUSEMOTION:
		break;


@@ 355,13 357,6 @@ main(int argc, char *argv[])
		return error("Font", "Failure");

	create(&g, HOR, VER);
	set(&g, 3, 3, 'S');
	set(&g, 3, 6, 'B');
	set(&g, 4, 6, '2');
	set(&g, 7, 2, '0');
	set(&g, 8, 7, '0');
	run(&g);

	select(0, 0, 1, 1);
	draw(pixels);