Files
Techmino/parts/scenes/music.lua
MrZ_26 2207f7e414 添加少许魔法
框架跟进
2022-04-04 05:25:42 +08:00

153 lines
5.3 KiB
Lua

local gc=love.graphics
local gc_setColor,gc_print=gc.setColor,gc.print
local sin=math.sin
local setFont=FONT.set
local author={
blank="MrZ (old works)",
["end"]="MrZ (old works)",
cruelty="MrZ (old works)",
final="MrZ (old works)",
infinite="MrZ (old works)",
push="MrZ (old works)",
race="MrZ (old works)",
reason="MrZ (old works)",
way="MrZ (old works)",
battle="Aether & MrZ",
moonbeam="Beethoven & MrZ",
empty="ERM",
["how feeling"]="V.A.",
["sugar fairy"]="Tchaikovsky & MrZ",
["secret7th remix"]="柒栎流星",
["jazz nihilism"]="Trebor",
["race remix"]="柒栎流星",
sakura="ZUN & C₂₉H₂₅N₃O₅",
["1980s"]="C₂₉H₂₅N₃O₅",
malate="ZUN & C₂₉H₂₅N₃O₅",
lounge="Hailey (cudsys) & MrZ",
}
local scene={}
local selected--Music selected
local bgmList=BGM.getList()
if #bgmList==0 then bgmList={"[NO BGM]"}end
function scene.sceneInit()
selected=TABLE.find(bgmList,BGM.nowPlay)or 1
end
function scene.wheelMoved(_,y)
WHEELMOV(y)
end
function scene.keyDown(key,isRep)
local S=selected
if key=='down'then
if S<#bgmList then
selected=S+1
SFX.play('touch',.7)
end
elseif key=='up'then
if S>1 then
selected=S-1
SFX.play('touch',.7)
end
elseif not isRep then
if key=='return'or key=='space'then
if BGM.nowPlay~=bgmList[S]then
BGM.play(bgmList[S])
SFX.play('click')
else
BGM.stop()
SFX.play('click')
end
elseif key=='tab'then
SCN.swapTo('launchpad','none')
elseif key=='escape'then
SCN.back()
elseif #key==1 and key:find'[0-9a-z]'then
for _=1,#bgmList do
selected=selected%#bgmList+1
if bgmList[selected]:sub(1,1)==key then break end
end
end
end
end
function scene.draw()
--Character
gc.push('transform')
local t=love.timer.getTime()
gc.setColor(1,1,1)
gc.translate(906,456)
gc.scale(.6)
GC.draw(IMG.z.character)
GC.draw(IMG.z.screen1, -91, -157+16*math.sin(t))
GC.draw(IMG.z.screen2, 120, -166+16*math.sin(t+1))
gc.setColor(1,1,1,.7+.3*math.sin(.6*t)) GC.draw(IMG.z.particle1, -50, 42+6*math.sin(t*0.36))
gc.setColor(1,1,1,.7+.3*math.sin(.7*t)) GC.draw(IMG.z.particle2, 110+6*math.sin(t*0.92), 55)
gc.setColor(1,1,1,.7+.3*math.sin(.8*t)) GC.draw(IMG.z.particle3, -54+6*math.sin(t*0.48), -248)
gc.setColor(1,1,1,.7+.3*math.sin(.9*t)) GC.draw(IMG.z.particle4, 133, -305+6*math.sin(t*0.40))
gc.pop()
gc_setColor(COLOR.Z)
--Scroller
gc.setLineWidth(2)
gc.line(315,307,315,482)
setFont(50)
gc_print(bgmList[selected],320,355)
setFont(35)
if selected>1 then gc_print(bgmList[selected-1],322,350-30)end
if selected<#bgmList then gc_print(bgmList[selected+1],322,350+65)end
setFont(20)
if selected>2 then gc_print(bgmList[selected-2],322,350-50)end
if selected<#bgmList-1 then gc_print(bgmList[selected+2],322,350+110)end
--Title
if BGM.nowPlay then
GC.draw(TEXTURE.title,562,180,nil,.42)
local a=-t%2.3/2.3
gc_setColor(1,1,1,math.min(a,1))
GC.draw(TEXTURE.title_color,562,180,nil,.42+.062-.062*a)
end
--Music player
if BGM.nowPlay then
local t=TIME()
setFont(45)
GC.shadedPrint(BGM.nowPlay,710,508,'left',2)
gc_setColor(sin(t*.5)*.2+.8,sin(t*.7)*.2+.8,sin(t)*.2+.8)
gc_print(BGM.nowPlay,710,508)
setFont(35)
gc_setColor(1,sin(t*2.6)*.5+.5,sin(t*2.6)*.5+.5)
gc_print(author[BGM.nowPlay]or"MrZ",670,465)
setFont(20)
gc_setColor(COLOR.Z)
local cur=BGM.playing:tell()
local dur=BGM.playing:getDuration()
gc_print(STRING.time_simp(cur%dur).." / "..STRING.time_simp(dur),480,626)
end
end
scene.widgetList={
WIDGET.newText{name='title', x=30,y=30,font=80,align='L'},
WIDGET.newText{name='arrow', x=270,y=360,font=45,align='L'},
WIDGET.newText{name='now', x=700,y=500,font=50,align='R',hideF=function()return not BGM.nowPlay end},
WIDGET.newSlider{name='slide',x=480,y=600,w=400,
disp=function()return BGM.playing:tell()/BGM.playing:getDuration()%1 end,
show=false,
code=function(v)BGM.seek(v*BGM.playing:getDuration())end,
hideF=function()return not BGM.nowPlay end
},
WIDGET.newSlider{name='bgm', x=760,y=80,w=400,disp=SETval('bgm'),code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
WIDGET.newButton{name='up', x=200,y=250,w=120,sound=false,code=pressKey'up',hideF=function()return selected==1 end,font=60,fText=CHAR.key.up},
WIDGET.newButton{name='play', x=200,y=390,w=120,sound=false,font=65,fText=CHAR.icon.play_pause,code=pressKey'space'},
WIDGET.newButton{name='down', x=200,y=530,w=120,sound=false,code=pressKey'down',hideF=function()return selected==#bgmList end,font=60,fText=CHAR.key.down},
WIDGET.newButton{name='sound',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene