58 lines
1.3 KiB
Lua
58 lines
1.3 KiB
Lua
--Space but tetrominoes
|
|
local gc=love.graphics
|
|
local gc_clear,gc_translate=gc.clear,gc.translate
|
|
local gc_setColor,gc_draw=gc.setColor,gc.draw
|
|
|
|
local sin,cos=math.sin,math.cos
|
|
local rnd=math.random
|
|
local ins,rem=table.insert,table.remove
|
|
local back={}
|
|
|
|
local t
|
|
local mino
|
|
function back.init()
|
|
t=0
|
|
mino={}
|
|
end
|
|
function back.update()
|
|
t=t+1
|
|
if t%3==0 then
|
|
local r=rnd(29)
|
|
ins(mino,{
|
|
block=TEXTURE.miniBlock[r],
|
|
color=BLOCK_COLORS[SETTING.skin[r]],
|
|
ang=6.2832*rnd(),
|
|
rotate=6.2832*rnd(),
|
|
vr=.05-rnd()*.1,
|
|
d=0,
|
|
v=.5+rnd(),
|
|
})
|
|
end
|
|
local rad=SCR.rad
|
|
for i=#mino,1,-1 do
|
|
local M=mino[i]
|
|
M.d=M.d+M.v
|
|
if M.d>rad*1.05 then
|
|
rem(mino,i)
|
|
else
|
|
M.rotate=M.rotate+M.vr
|
|
M.v=M.v*(1+M.d/rad*.05)
|
|
end
|
|
end
|
|
end
|
|
function back.draw()
|
|
gc_clear(.1,.1,.1)
|
|
gc_translate(SCR.cx,SCR.cy)
|
|
for i=1,#mino do
|
|
local M=mino[i]
|
|
local c=M.color
|
|
gc_setColor(c[1],c[2],c[3],.2)
|
|
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
|
end
|
|
gc_translate(-SCR.cx,-SCR.cy)
|
|
end
|
|
function back.discard()
|
|
mino=nil
|
|
end
|
|
return back
|