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\