-- sample for termfx -- Gunnar Zötl , 2014-2015 -- Released under the terms of the MIT license. See file LICENSE for details. tfx = require "termfx" tfx.init() function makespr(s, fg, bg) local c = "-:+=%ZXH#" local spr = tfx.newbuffer(s, s/2) spr:attributes(fg, bg) for y=1, s/2 do for x=1, s do local lx, ly = (x-0.5)/s, (2*y-1)/s local v = math.floor((math.sin(lx*math.pi) + math.sin(ly*math.pi)) / 2 * #c) local ch = string.sub(c, v, v) spr:setcell(x, y, ch) end end return spr end tfx.outputmode(tfx.output.NORMAL) ok, err = pcall(function() local sprites = {} local blit2screen = true for i=1, 5 do sprites[i] = makespr(2^(i+2), i+1, tfx.color.BLACK) end local snum = 1 local spr = sprites[snum] local sw, sh = spr:width(), spr:height() local x, y = 1-sw, 1-sh local xo, yo = 1, 1 local fw, fh = tfx.width(), tfx.height() local target = tfx.newbuffer(fw - 2, fh - 2) local w, h = target:width(), target:height() repeat if blit2screen then tfx.clear(tfx.color.WHITE, tfx.color.BLACK) tfx.blit(x, y, spr) else tfx.clear(tfx.color.WHITE, tfx.color.RED) target:clear(tfx.color.WHITE, tfx.color.BLACK) target:blit(x, y, spr) tfx.blit(2, 2, target) end x = x + xo if x > w or x < 1-sw then xo = -xo end y = y + yo if y > h or y < 1-sh then yo = -yo end tfx.printat(1, tfx.height(), "print 1.."..#sprites.." for sprite size, t to toggle blit to screen or buffer, q to quit") tfx.printat(1, 1, "Current size: "..snum.." ("..spr:width().."x"..spr:height()..")") tfx.present() evt = tfx.pollevent(333) snum = evt and tonumber(evt.char) or snum if snum >= 1 and snum <= #sprites then spr = sprites[snum] sw, sh = spr:width(), spr:height() if x < 1-sw then x = 1-sw xo = 1 end if y < 1-sh then y = 1-sh yo = 1 end end if evt and evt.char == 't' then blit2screen = not blit2screen end until evt and evt.type == "key" and evt.char == "q" end) tfx.shutdown() if not ok then print("Error: "..err) end