shithub: etoys

Download patch

ref: 12406c361e2a65637beec739f9983bb088e26da7
parent: 69b437a06edba3582a505b0e6b5c3ff06736465f
author: rodri <rgl@antares-labs.eu>
date: Thu May 14 17:00:54 EDT 2020

new toy: isometric
grid: add some more stats
updated pic files to rgba and no floyd-steinberg dithering

--- a/asset/tile/bl.pic
+++ b/asset/tile/bl.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeee����������������eeeeeeeee�����������������������e�������e�veeeee����������������e�veeeeee�e���������������������e�e�����e�e�				����������������				eveve�e�				����������������	&&	�e�ee�e�		&&����������������	&'	�e�ee�e�		&	����������������				�e�ee�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	&		7	7			7					7		7	veeve�e�		&			&				&	7	7	&	&	7		���ee�e�		&	&	&	&&&		&	&	&	&			&eeeee�e�		&			&					&								&&	����e�e�v�e���������������������eeeve�e�v�e�veevveeeeveeeeeeeevve���e�e�v�e�e���������e�����������vee�e�v�eee�veveeveve�veveveveeee
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
\ No newline at end of file
--- a/asset/tile/br.pic
+++ b/asset/tile/br.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeee����������������eeeeeeeee�����������������������e�������e�veeeee����������������e�veeeeee�e���������������������e�e�����e�e�				����������������				eveve�e�				����������������	&&	�e�ee�e�		&&����������������	&'	�e�ee�e�		&	����������������				�e�e������������������������	&&	�vee������������������������				�e��������������������������7&&	�e�v������������������������				�e�e������������������������7	&	�e�v������������������������7	&	�e�e������������������������			�e�v������������������������		&	�e�v������������������������	&		�e�e������������������������			&�e�v������������������������	&&	�e�v������������������������				�e�e������������������������7	&&�e�v������������������������		&	�vee������������������������	7		�v��������������������������		&	�e�eeeee						7	77					7			7	&	�e�ee���	&&	&	&					&	&			7			&	�e�ve�ve	&'	&	&	&&	&		&	&&	&&&		�e�ee�e�													&		&						&�e�ve�e�e�����������������������ee�ee�e�veeeveeeeeeeeeeeevveeeeee��ve�e�e���e������������e��������vee�e�veeee�vevevvevveve�eeveveve
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
\ No newline at end of file
binary files a/asset/tile/empty.pic b/asset/tile/empty.pic differ
binary files a/asset/tile/filled.pic b/asset/tile/filled.pic differ
--- a/asset/tile/grass.pic
+++ b/asset/tile/grass.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee�������������������������������e�veeeeeeeeeeeeeeeeeeeeeeeeeeeeee�e�����������������������������e�e�																								vvvve�e�																								����e�e�		&&&&&&&&&&&&&&&&&&&&&&eeeee�e�		&																					���ee�e�		&		&	&	&	&	&	&	&	&	&	&�veee�e�		&	&																			�v��e�e�		&			&		&	&	&	&	&	&	&	�eeee�e�		&	&			&	&	&	&	&	&	&	&	�e��e�e�		&			&											�e�ve�e�		&	&				&&&&	&&		7	7	7	v�eee�e�		&			&&	&'			&'	7&	&	&	��v�e�e�		&	&				&			&			&						�ve�e�e�		&			&&	&		&		&				&&	&�e�ee�e�		&	&						&		&		&&&			&�v�ee�e�		&			&&	&&		&		&				&		�v�ee�e�		&	&			&'	&		&		&				&�eeee�e�		&			&&						&		&		&&&	�e��e�e�		&	&				7&	&		&		&			�v�ve�e�		&			&&	7&		&	&		&	&	&veeee�e�		&	&							&			&		&			����e�e�		&			&&	7&	&			&	&		&	�veee�e�		&	&						&	&	&	&		&		�e��e�e�		&			&&	7&					&			&		&�e�ve�e�		&	&						&&	&	&			&	�e�ee�e�v�e������v��������v������v�ve�e�v�e�vveee��vevveeve�veeeveeee�e�v�e�e�e��eve���e��e�e����e��e�e�v�eee�e�ve��eeee�ve�e�veve�e
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
\ No newline at end of file
--- a/asset/tile/hori.pic
+++ b/asset/tile/hori.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee�������������������������������e�veeeeeeeeeeeeeeeeeeeeeeeeeeeeee�e�����������������������������e�e�																								vvvve�e�																								����e�e�		&&&&&&&&&&&&&&&&&&&&&&eeeee�e�		&																					���e��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������eeee						7	77				7	7		7	eevee���	&&	&	&					&	&						&		e��ee�ve	&'	&	&	&&	&		&	&&&&	&	&��vee�e�													&										�ve�e�e�e�����������������������ee�ee�e�veeeveeeeeeeeeeeeeeeveeee��ee�e�e���e����������������e����vee�e�veeee�vevevvevvevvevee�veve
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeee��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������eeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
\ No newline at end of file
--- a/asset/tile/tl.pic
+++ b/asset/tile/tl.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee�������������������������������e�veeeeeeeeeeeeeeeeeeeeeeeeeeeeee�e�����������������������������e�e�																								vvvve�e�																								����e�e�		&&&&&&&&&&&&&&&&&&&&&&eeeee�e�		&																					���ee�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	������������������������e�e�		&	����������������			eveee�e�		&	����������������		&e���e�e�		&	����������������		&	��vee�e�		&	����������������	&		�ve�e�e�v�e�����������������ee���e�ee�e�v�e�����������������v��vee�ee�e�v�e�����������������e�ve��eee�e�v�ee����������������e�e�eee
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				������������������������eeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeee
\ No newline at end of file
--- a/asset/tile/tr.pic
+++ b/asset/tile/tr.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee�������������������������������e�veeeeeeeeeeeeeeeeeeeeeeeeeeeeee�e�����������������������������e�e�																								vvvve�e�																								����e�e�		&&&&&&&&&&&&&&&&&&&&&&eeeee�e�		&																					���e������������������������&	&	�vee������������������������				�e��������������������������	&&&�e�v������������������������7			�v�e������������������������		&	�v�v������������������������7	&	�e�e������������������������		&	�e�e������������������������	&		�e�v������������������������			&�e�e������������������������77&	�v�v������������������������				�eee������������������������	7&	�e��������������������������				�e�v������������������������	&&	�e�e������������������������				�e�v������������������������7&&	�e�eeeee				����������������				�e�ve���	&&	����������������	7	&�e�ee�ve	&'	����������������7		&�v�ve�e�				����������������		&	�v�ee�e�e�������������������v�e�ee�ee�e�veee����������������e�e�e��ee�e�e�������������������e�e�e�vee�e�veee����������������vee�v�e
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee																								eeeeeeee																								eeeeeeee																								eeeeeeee																								eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeee������������������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeee
\ No newline at end of file
--- a/asset/tile/vert.pic
+++ b/asset/tile/vert.pic
@@ -1,1 +1,1 @@
-         m8           0           0          32          32 eeeeeeee����������������eeeeeeeee�����������������������e�������e�veeeee����������������e�veeeeee�e���������������������e�e�����e�e�				����������������				eveve�e�				����������������	&&	�e�ee�e�		&&����������������	&'	�e�ee�e�		&	����������������				�e�ee�e�		&	����������������	&&	�veee�e�		&	����������������				�e��e�e�		&	����������������7&&	�e�ve�e�		&	����������������				�e�ee�e�		&	����������������7	&	�e�ve�e�		&	����������������7	&	�e�ee�e�		&	����������������			�e�ve�e�		&	����������������		&	�e�ve�e�		&	����������������	&		�e�ee�e�		&	����������������			&�e�ve�e�		&	����������������	&&	�e�ve�e�		&	����������������7			�e�ee�e�		&	����������������		&	�e�ve�e�		&	����������������	&	�e�ve�e�		&	����������������7	&	�e�ee�e�		&	����������������	&	�e�ve�e�		&	����������������				�v�ee�e�		&	����������������	&&	�eeee�e�		&	����������������7			�e��e�e�		&	����������������		&	�e�ve�e�v�e�����������������ee��ee�ee�e�v�e�����������������e��ve��ve�e�v�e�����������������v�ve��vee�e�v�ee����������������eee�eee
\ No newline at end of file
+         m8           0           0          32          32 eeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeee				����������������				eeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeeeeeeeeeee����������������eeeeeeee
\ No newline at end of file
--- a/grid.c
+++ b/grid.c
@@ -37,11 +37,11 @@
 };
 RFrame worldrf;
 char *map[] = {
-	"nHHHHe",
-	"VggggV",
-	"VggggV",
-	"VggggV",
-	"wHHHHs"
+	"nHHHe",
+	"VgggV",
+	"VgggV",
+	"VgggV",
+	"wHHHs"
 };
 Point mpos;
 
@@ -83,10 +83,18 @@
 void
 drawstats(void)
 {
+	Point2 mp, p;
 	char s[256];
 
-	snprint(s, sizeof s, "%v", fromscreen(mpos));
+	mp = fromscreen(mpos);
+	snprint(s, sizeof s, "Global %v", mp);
 	stringbg(screen, addpt(screen->r.min, Pt(20,20)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
+	p = Pt2(fmod(mp.x, TW),fmod(mp.y, TH),1);
+	snprint(s, sizeof s, "Local %v", p);
+	stringbg(screen, addpt(screen->r.min, Pt(20,20+font->height)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
+	p = Pt2((int)mp.x/TW,(int)mp.y/TH,1);
+	snprint(s, sizeof s, "Cell %v", p);
+	stringbg(screen, addpt(screen->r.min, Pt(20,20+font->height*2)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
 }
 
 void
@@ -140,6 +148,8 @@
 		switch(event(&e)){
 		case Emouse:
 			mpos = e.mouse.xy;
+			if((e.mouse.buttons&1) != 0)
+				worldrf.p = Pt2(e.mouse.xy.x,e.mouse.xy.y,1);
 			redraw();
 			break;
 		case Ekeyboard:
--- /dev/null
+++ b/isometric.c
@@ -1,0 +1,168 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <geometry.h>
+#include <event.h>
+#include <keyboard.h>
+
+enum {
+	Cbg,
+	Cfg,
+	Ctxtbg,
+	NCOLOR
+};
+
+enum {
+	TW = 16,
+	TH = 8
+};
+
+typedef struct Tile Tile;
+struct Tile
+{
+	char *name;
+	char id;
+	Image *img;
+};
+
+Image *pal[NCOLOR];
+Tile tiles[] = {
+	{ .name = "empty", .id = 'e' },
+	{ .name = "filled", .id = 'f' }
+};
+RFrame worldrf;
+char *map[] = {
+	"eeeee",
+	"eefee",
+	"efefe",
+	"eefee",
+	"eefee"
+};
+Point mpos;
+
+Point
+toscreen(Point2 p)
+{
+	p = invrframexform(p, worldrf);
+	return Pt(p.x,p.y);
+}
+
+Point2
+fromscreen(Point p)
+{
+	return rframexform(Pt2(p.x,p.y,1), worldrf);
+}
+
+void
+initpalette(void)
+{
+	pal[Cbg] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DBlack);
+	pal[Cfg] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DDarkblue);
+	pal[Ctxtbg] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DPaleyellow);
+}
+
+void
+inittiles(void)
+{
+	char path[256];
+	int fd, i;
+
+	for(i = 0; i < nelem(tiles); i++){
+		snprint(path, sizeof path, "asset/tile/%s.pic", tiles[i].name);
+		fd = open(path, OREAD);
+		tiles[i].img = readimage(display, fd, 0);
+		close(fd);
+	}
+}
+
+void
+drawstats(void)
+{
+	Point2 mp, p;
+	char s[256];
+
+	mp = fromscreen(mpos);
+	snprint(s, sizeof s, "Global %v", mp);
+	stringbg(screen, addpt(screen->r.min, Pt(20,20)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
+	p = Pt2(fmod(mp.x, TW),fmod(mp.y, TH),1);
+	snprint(s, sizeof s, "Local %v", p);
+	stringbg(screen, addpt(screen->r.min, Pt(20,20+font->height)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
+	p = Pt2((int)mp.x/TW,(int)mp.y/TH,1);
+	snprint(s, sizeof s, "Cell %v", p);
+	stringbg(screen, addpt(screen->r.min, Pt(20,20+font->height*2)), pal[Cfg], ZP, font, s, pal[Ctxtbg], ZP);
+}
+
+void
+redraw(void)
+{
+	Point2 dp;
+	int i, j;
+	char *row;
+
+	draw(screen, screen->r, pal[Cbg], nil, ZP);
+	for(i = 0; i < nelem(map); i++)
+		for(row = map[i]; *row; row++){
+			dp = Pt2((row-map[i]-i)*TW/2,(i+row-map[i])*TH/2,1);
+			for(j = 0; j < nelem(tiles); j++)
+				if(tiles[j].id == *row)
+					draw(screen, Rpt(toscreen(dp),addpt(toscreen(dp), Pt(TW,TH))), tiles[j].img, nil, ZP);
+		}
+	drawstats();
+	flushimage(display, 1);
+}
+
+void
+usage(void)
+{
+	fprint(2, "usage: %s\n", argv0);
+	exits("usage");
+}
+
+void
+main(int argc, char *argv[])
+{
+	Event e;
+
+	GEOMfmtinstall();
+	ARGBEGIN{
+	default: usage();
+	}ARGEND;
+	if(argc > 0)
+		usage();
+	if(initdraw(nil, nil, nil) < 0)
+		sysfatal("initdraw: %r");
+	initpalette();
+	inittiles();
+	worldrf.p = Pt2(screen->r.min.x,screen->r.min.y,1);
+	worldrf.p = addpt2(worldrf.p, Vec2(Dx(screen->r)/2,Dy(screen->r)/3));
+	worldrf.bx = Vec2(1,0);
+	worldrf.by = Vec2(0,1);
+	einit(Emouse|Ekeyboard);
+	redraw();
+	for(;;)
+		switch(event(&e)){
+		case Emouse:
+			mpos = e.mouse.xy;
+			if((e.mouse.buttons&1) != 0)
+				worldrf.p = Pt2(e.mouse.xy.x,e.mouse.xy.y,1);
+			redraw();
+			break;
+		case Ekeyboard:
+			switch(e.kbdc){
+			case 'q':
+			case Kdel:
+				exits(0);
+			}
+			break;
+		}
+}
+
+void
+eresized(int)
+{
+	if(getwindow(display, Refnone) < 0)
+		sysfatal("resize failed");
+	worldrf.p = Pt2(screen->r.min.x,screen->r.min.y,1);
+	worldrf.p = addpt2(worldrf.p, Vec2(Dx(screen->r)/2,Dy(screen->r)/3));
+	redraw();
+}
--- a/mkfile
+++ b/mkfile
@@ -6,6 +6,7 @@
 	beziers\
 	bsplines\
 	grid\
+	isometric\
 
 HFILES=\
 	libgeometry/geometry.h\