ExperimentalGear/scripts/songtransition.lua

67 lines
1.9 KiB
Lua

game.LoadSkinSample('song_transition_screen/transition_enter.wav');
local transitionTimer = 3
local resx, resy = game.GetResolution()
local outTimer = 1
local noJacket = gfx.CreateSkinImage("song_select/loading.png", 0)
local wasEnterSfxPlayed = false;
function render(deltaTime)
if not wasEnterSfxPlayed then
game.PlaySample('song_transition_screen/transition_enter.wav');
wasEnterSfxPlayed = true;
end
render_screen(transitionTimer)
transitionTimer = transitionTimer + deltaTime * 2
transitionTimer = math.min(transitionTimer,1)
return transitionTimer >= 1
end
function render_out(deltaTime)
outTimer = outTimer + deltaTime * 2
outTimer = math.min(outTimer, 2)
render_screen(outTimer)
return outTimer >= 2;
end
function sign(x)
return x>0 and 1 or x<0 and -1 or 0
end
function render_screen(progress)
for i=0,resx/50 do
local dir = sign((i % 2) - 0.5)
local yoff = dir * resy * (1 - progress)
gfx.Save()
gfx.Translate(0,yoff)
gfx.BeginPath()
gfx.Rect(60 * i, yoff, 60, resy)
gfx.FillColor(0,64, 150 + 25 * dir)
gfx.Fill()
gfx.Restore()
end
local y = (resy/2 + 100) * (math.sin(0.5 * progress * math.pi)^7) - 200
gfx.Save()
gfx.BeginPath()
gfx.Translate(resx/2, y)
local jacket = song.jacket == 0 and noJacket or song.jacket
gfx.ImageRect(-150,-150,300,300,jacket,1,0)
gfx.Restore()
gfx.Translate(resx/2, resy - y - 50)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_TOP)
gfx.FontSize(80)
gfx.Text(song.title,0,0)
gfx.FontSize(55)
gfx.Text(song.artist,0,80)
end
function reset()
transitionTimer = 0
resx, resy = game.GetResolution()
outTimer = 1
wasEnterSfxPlayed = false;
end