126 lines
2.5 KiB
Lua
126 lines
2.5 KiB
Lua
local gc=love.graphics
|
|
local rnd=math.random
|
|
local rem=table.remove
|
|
local setFont,mStr=setFont,mStr
|
|
|
|
local texts={}
|
|
|
|
local textFX={}
|
|
function textFX.appear(t)
|
|
mStr(t.text,t.x,t.y-t.font*.7)
|
|
end
|
|
function textFX.sudden(t)
|
|
gc.setColor(1,1,1,1-t.c)
|
|
mStr(t.text,t.x,t.y-t.font*.7)
|
|
end
|
|
function textFX.fly(t)
|
|
mStr(t.text,t.x+(t.c-.5)^3*300,t.y-t.font*.7)
|
|
end
|
|
function textFX.stretch(t)
|
|
gc.push("transform")
|
|
gc.translate(t.x,t.y)
|
|
if t.c<.3 then gc.scale((.3-t.c)*1.6+1,1)end
|
|
mStr(t.text,0,-t.font*.7)
|
|
gc.pop()
|
|
end
|
|
function textFX.drive(t)
|
|
gc.push("transform")
|
|
gc.translate(t.x,t.y)
|
|
if t.c<.3 then gc.shear((.3-t.c)*2,0)end
|
|
mStr(t.text,0,-t.font*.7)
|
|
gc.pop()
|
|
end
|
|
function textFX.spin(t)
|
|
gc.push("transform")
|
|
gc.translate(t.x,t.y)
|
|
if t.c<.3 then
|
|
gc.rotate((.3-t.c)^2*4)
|
|
elseif t.c>.8 then
|
|
gc.rotate((t.c-.8)^2*-4)
|
|
end
|
|
mStr(t.text,0,-t.font*.7)
|
|
gc.pop()
|
|
end
|
|
function textFX.flicker(t)
|
|
local _,_,_,T=gc.getColor()
|
|
gc.setColor(1,1,1,T*(rnd()+.5))
|
|
mStr(t.text,t.x,t.y-t.font*.7)
|
|
end
|
|
function textFX.zoomout(t)
|
|
gc.push("transform")
|
|
local k=t.c^.5*.1+1
|
|
gc.translate(t.x,t.y)
|
|
gc.scale(k,k)
|
|
mStr(t.text,0,-t.font*.7)
|
|
gc.pop()
|
|
end
|
|
function textFX.beat(t)
|
|
gc.push("transform")
|
|
gc.translate(t.x,t.y)
|
|
if t.c<.3 then
|
|
local k=1.3-t.c^2/.3
|
|
gc.scale(k,k)
|
|
end
|
|
mStr(t.text,0,-t.font*.7)
|
|
gc.pop()
|
|
end
|
|
function textFX.score(t)
|
|
local _,_,_,T=gc.getColor()
|
|
gc.setColor(1,1,1,T*.5)
|
|
mStr(t.text,t.x,t.y-t.font*.7-t.c^.2*50)
|
|
end
|
|
|
|
local TEXT={}
|
|
function TEXT.clear()
|
|
texts={}
|
|
end
|
|
function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT()
|
|
return{
|
|
c=0,
|
|
text=text,
|
|
x=x or 0,
|
|
y=y or 0,
|
|
font=font or 40,
|
|
spd=(spd or 1)/60,
|
|
stop=stop,
|
|
draw=textFX[style]or assert(false,"unavailable type:"..style),
|
|
}
|
|
end
|
|
function TEXT.show(text,x,y,font,style,spd,stop)
|
|
texts[#texts+1]={
|
|
c=0, --Timer
|
|
text=text, --String
|
|
x=x or 0, --X
|
|
y=y or 0, --Y
|
|
font=font or 40, --Font
|
|
spd=(spd or 1)/60, --Timing speed(1=last 1 sec)
|
|
stop=stop, --Stop time(sustained text)
|
|
draw=textFX[style]or assert(false,"unavailable type:"..style), --Draw method
|
|
}
|
|
end
|
|
function TEXT.update(list)
|
|
if not list then list=texts end
|
|
for i=#list,1,-1 do
|
|
local t=list[i]
|
|
t.c=t.c+t.spd
|
|
if t.stop then
|
|
if t.c>t.stop then
|
|
t.c=t.stop
|
|
end
|
|
end
|
|
if t.c>1 then
|
|
rem(list,i)
|
|
end
|
|
end
|
|
end
|
|
function TEXT.draw(list)
|
|
if not list then list=texts end
|
|
for i=1,#list do
|
|
local t=list[i]
|
|
local p=t.c
|
|
gc.setColor(1,1,1,p<.2 and p*5 or p<.8 and 1 or 5-p*5)
|
|
setFont(t.font)
|
|
t:draw()
|
|
end
|
|
end
|
|
return TEXT |