aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2020-05-13 21:15:23 +0000
committerrodri <rgl@antares-labs.eu>2020-05-13 21:15:23 +0000
commit69b437a06edba3582a505b0e6b5c3ff06736465f (patch)
tree690af446c370166d933b15862fa04707b47b0fd6
parent64ae1b600bef8c31423e959eb5f22935d6cdeac9 (diff)
downloadetoys-69b437a06edba3582a505b0e6b5c3ff06736465f.tar.gz
etoys-69b437a06edba3582a505b0e6b5c3ff06736465f.tar.bz2
etoys-69b437a06edba3582a505b0e6b5c3ff06736465f.zip
new toy: grid
-rw-r--r--asset/tile/bl.pic1
-rw-r--r--asset/tile/br.pic1
-rw-r--r--asset/tile/empty.picbin0 -> 188 bytes
-rw-r--r--asset/tile/filled.picbin0 -> 188 bytes
-rw-r--r--asset/tile/grass.pic1
-rw-r--r--asset/tile/hori.pic1
-rw-r--r--asset/tile/tl.pic1
-rw-r--r--asset/tile/tr.pic1
-rw-r--r--asset/tile/vert.pic1
-rw-r--r--grid.c163
-rw-r--r--mkfile17
11 files changed, 187 insertions, 0 deletions
diff --git a/asset/tile/bl.pic b/asset/tile/bl.pic
new file mode 100644
index 0000000..a594db2
--- /dev/null
+++ b/asset/tile/bl.pic
@@ -0,0 +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
diff --git a/asset/tile/br.pic b/asset/tile/br.pic
new file mode 100644
index 0000000..18a9116
--- /dev/null
+++ b/asset/tile/br.pic
@@ -0,0 +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
diff --git a/asset/tile/empty.pic b/asset/tile/empty.pic
new file mode 100644
index 0000000..3adc4e5
--- /dev/null
+++ b/asset/tile/empty.pic
Binary files differ
diff --git a/asset/tile/filled.pic b/asset/tile/filled.pic
new file mode 100644
index 0000000..d3bc0a7
--- /dev/null
+++ b/asset/tile/filled.pic
Binary files differ
diff --git a/asset/tile/grass.pic b/asset/tile/grass.pic
new file mode 100644
index 0000000..c1027e5
--- /dev/null
+++ b/asset/tile/grass.pic
@@ -0,0 +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
diff --git a/asset/tile/hori.pic b/asset/tile/hori.pic
new file mode 100644
index 0000000..ab12d67
--- /dev/null
+++ b/asset/tile/hori.pic
@@ -0,0 +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
diff --git a/asset/tile/tl.pic b/asset/tile/tl.pic
new file mode 100644
index 0000000..a18f336
--- /dev/null
+++ b/asset/tile/tl.pic
@@ -0,0 +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
diff --git a/asset/tile/tr.pic b/asset/tile/tr.pic
new file mode 100644
index 0000000..131ba74
--- /dev/null
+++ b/asset/tile/tr.pic
@@ -0,0 +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
diff --git a/asset/tile/vert.pic b/asset/tile/vert.pic
new file mode 100644
index 0000000..2a969fb
--- /dev/null
+++ b/asset/tile/vert.pic
@@ -0,0 +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
diff --git a/grid.c b/grid.c
new file mode 100644
index 0000000..50b8e07
--- /dev/null
+++ b/grid.c
@@ -0,0 +1,163 @@
+#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 = 32,
+ TH = 32
+};
+
+typedef struct Tile Tile;
+struct Tile
+{
+ char *name;
+ char id;
+ Image *img;
+};
+
+Image *pal[NCOLOR];
+Tile tiles[] = {
+ { .name = "tl", .id = 'n' },
+ { .name = "tr", .id = 'e' },
+ { .name = "bl", .id = 'w' },
+ { .name = "br", .id = 's' },
+ { .name = "hori", .id = 'H' },
+ { .name = "vert", .id = 'V' },
+ { .name = "grass", .id = 'g' }
+};
+RFrame worldrf;
+char *map[] = {
+ "nHHHHe",
+ "VggggV",
+ "VggggV",
+ "VggggV",
+ "wHHHHs"
+};
+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)
+{
+ char s[256];
+
+ snprint(s, sizeof s, "%v", fromscreen(mpos));
+ stringbg(screen, addpt(screen->r.min, Pt(20,20)), 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])*TW,i*TH,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;
+ 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();
+}
diff --git a/mkfile b/mkfile
index 3d849bb..c934f69 100644
--- a/mkfile
+++ b/mkfile
@@ -5,5 +5,22 @@ TARG=\
triangles\
beziers\
bsplines\
+ grid\
+
+HFILES=\
+ libgeometry/geometry.h\
+
+LIB=\
+ libgeometry/libgeometry.a$O\
+
+CFLAGS=$CFLAGS -Ilibgeometry
</sys/src/cmd/mkmany
+
+libgeometry/libgeometry.a$O:
+ cd libgeometry
+ mk install
+
+clean nuke:V:
+ rm -f *.[$OS] [$OS].??* $TARG
+ @{cd libgeometry; mk $target}