Reorganise luacurses
[project/luci.git] / contrib / luacurses / test / rain.lua
diff --git a/contrib/luacurses/test/rain.lua b/contrib/luacurses/test/rain.lua
new file mode 100644 (file)
index 0000000..35e4691
--- /dev/null
@@ -0,0 +1,89 @@
+
+require("curses");
+
+curses.initscr();
+curses.nl();
+curses.noecho();
+
+
+if (curses.has_colors()) then
+    curses.start_color();
+    curses.init_pair(1, curses.COLOR_BLUE, curses.COLOR_BLACK);
+    curses.init_pair(2, curses.COLOR_CYAN, curses.COLOR_BLACK);
+end
+
+curses.curs_set(0);
+curses.timeout(0);
+
+math.randomseed(os.time());
+
+lines = curses.LINES();
+cols = curses.COLS();
+
+xpos = {};
+ypos = {};
+r = lines - 4;
+c = cols - 4;
+for i = 0, 4 do
+  xpos[i] = c * math.random() + 2;
+  ypos[i] = r * math.random() + 2;
+end
+
+function dec(i, max)
+    if (curses.has_colors()) then
+       local z = 3 * math.random();
+       local c = curses.COLOR_PAIR(z);
+       curses.attrset(c);
+       if (math.floor(z) > 0) then
+           curses.attron(curses.A_BOLD);
+       end
+    end
+
+    if (i > 0) then return i - 1;
+    else return max;
+    end
+end
+
+i = 0;
+while(true) do
+    x = c * math.random() + 2;
+    y = r * math.random() + 2;
+
+    curses.mvaddstr(y, x, ".");
+
+    curses.mvaddstr(ypos[i], xpos[i],           "o");
+
+    i = dec(i, 4);
+    curses.mvaddstr(ypos[i], xpos[i],           "O");
+
+    i = dec(i, 4);
+    curses.mvaddstr(ypos[i] - 1, xpos[i],       "-");
+    curses.mvaddstr(ypos[i],     xpos[i] - 1,  "|.|");
+    curses.mvaddstr(ypos[i] + 1, xpos[i],       "-");
+
+    i = dec(i, 4);
+    curses.mvaddstr(ypos[i] - 2, xpos[i],       "-");
+    curses.mvaddstr(ypos[i] - 1, xpos[i] - 1,  "/ \\");
+    curses.mvaddstr(ypos[i],     xpos[i] - 2, "| O |");
+    curses.mvaddstr(ypos[i] + 1, xpos[i] - 1, "\\ /");
+    curses.mvaddstr(ypos[i] + 2, xpos[i],       "-");
+
+    i = dec(i, 4);
+    curses.mvaddstr(ypos[i] - 2, xpos[i],       " ");
+    curses.mvaddstr(ypos[i] - 1, xpos[i] - 1,  "   ");
+    curses.mvaddstr(ypos[i],     xpos[i] - 2, "     ");
+    curses.mvaddstr(ypos[i] + 1, xpos[i] - 1,  "   ");
+    curses.mvaddstr(ypos[i] + 2, xpos[i],       " ");
+
+
+    xpos[i] = x;
+    ypos[i] = y;
+    
+    local ch = curses.getch();
+    if (ch == string.byte('q', 1)) or (ch == string.byte('Q', 1)) then break; end
+    curses.refresh();
+    curses.napms(50);
+end
+
+curses.endwin();
+