]> hydra-www.ietfng.org Git - acmetensortoys-esp-lua_lamp/commitdiff
draw-snakeflower: new drawing
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Wed, 14 Mar 2018 18:04:53 +0000 (14:04 -0400)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Wed, 14 Mar 2018 18:04:53 +0000 (14:04 -0400)
draw-snakeflower.lua [new file with mode: 0644]

diff --git a/draw-snakeflower.lua b/draw-snakeflower.lua
new file mode 100644 (file)
index 0000000..5c822ad
--- /dev/null
@@ -0,0 +1,103 @@
+-- snake2 with some camera panning and a vertical flower
+--
+-- Palette: snake, heart, flower
+--
+--    1 2 3 4 5 6 7 8
+-- 00 o o o o o h x h
+-- 08 o o o o o e x o
+-- 16 w w w w o o x o
+-- 24 w w w w x x x o
+--
+--    1 2 3 4 5 6 7 8
+-- 00 o o x h o f o f
+-- 08 o e x o o f f f
+-- 16 o o x o o o s o
+-- 24 x x x o o o s o
+
+--
+return function(t,fb,p)
+  local c, h, f, fh
+
+  local z = string.char(0,0,0)
+  local s = string.char(15,0,0)
+  local sh = string.char(7,0,0)
+  local function reinit()
+    c = p[1]
+    h = p[2] or string.char(0,15,0) -- heart defaults red
+    f = p[3] or string.char(0,7,15) -- flower defaults purple
+
+    fh = string.char(math.floor((f:byte(1)+1)/2),
+                     math.floor((f:byte(2)+1)/2),
+                     math.floor((f:byte(3)+1)/2))
+  end
+  reinit()
+
+  local function panright()
+    fb:shift(-1, ws2812.SHIFT_LOGICAL)
+    fb:set(8,z) fb:set(16,z) fb:set(24,z) fb:set(32,z)
+  end
+
+  local ft = {   -- snake to full screen, flattened, heart off
+               [1] = function()
+                      fb:fill(0,0,0)
+                      fb:set(25,c) fb:set(26,c) fb:set(27,c) fb:set(28,c) fb:set(29,c) fb:set(30,c)
+                      fb:set(23,c) fb:set(15,c) fb:set(7,c) fb:set(8,c)
+                    end
+                 -- look back
+             , [2] = function() fb:set(6,c) fb:set(8,z) end
+                 -- look forward
+             , [3] = function() fb:set(6,z) fb:set(8,c) end
+                 -- heart on (like what we see)
+             , [4] = function() fb:set(14,h) end
+                 -- slither 1
+             , [5] = function() fb:set(20,c) fb:set(28,z) end
+                 -- slither 2
+             , [6] = function() fb:set(19,c) fb:set(20,z) fb:set(27,z) fb:set(28,c) end
+                 -- slither 3
+             , [7] = function() fb:set(18,c) fb:set(19,z) fb:set(20,c) fb:set(26,z) fb:set(27,c) fb:set(28,z) end
+                 -- slither 4
+             , [8] = function() fb:set(17,c) fb:set(18,z) fb:set(19,c) fb:set(20,z) fb:set(25,z) fb:set(26,c) fb:set(27,z) fb:set(28,c) end
+                 -- pan right one column
+             , [9] = panright
+                 -- and again
+             , [10] = panright
+                 -- and again, but draw the flower stem and bud
+             , [11] = function() panright() fb:set(16,fh) fb:set(24,s) fb:set(32,s) end
+                 -- and again, but draw a leaf, too
+             , [12] = function() panright() fb:set(24,sh) end
+                 -- wait one
+             , [13] = function() end
+                 -- grow flower
+             , [14] = function() fb:set(14,fh) fb:set(15,f) fb:set(16,fh) end
+                 -- grow flower again
+             , [15] = function() fb:set(6,fh) fb:set(8,fh) fb:set(14,f) fb:set(16,f) end
+                 -- wait two
+             , [16] = function() end
+             , [17] = function() end
+             }
+
+  local ix = 2
+  ft[1]()
+
+  t:register(500,tmr.ALARM_AUTO,function()
+    ft[ix]()
+    ix = (ix == #ft and 1) or ix + 1
+    dodraw()
+  end)
+
+  return { ['ncolors'] = 3,
+           ['cccb'] = function()
+                        reinit()
+                        ft[1]() -- first frame
+                        ft[4]() -- render heart
+                        ft[9]() -- move over and render flower
+                        ft[10]()
+                        ft[11]()
+                        ft[12]()
+                        ft[14]()
+                        ft[15]()
+                        dodraw()
+                        ix = 16
+                      end
+         }
+end