音乐室改为launchpad(暂时只有两页)

This commit is contained in:
MrZ626
2021-09-26 18:58:40 +08:00
parent 03689c6a0b
commit 242416a25d
10 changed files with 185 additions and 551 deletions

View File

@@ -1,44 +1,123 @@
local gc=love.graphics
local gc_push,gc_pop=gc.push,gc.pop
local gc_translate,gc_scale=gc.translate,gc.scale
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
local gc_rectangle,gc_circle=gc.rectangle,gc.circle
local int,max=math.floor,math.max
local scene={}
local mini,b2b,b3b,pc
local pad={x=140,y=65,k=1,page=1,
func={'page1','page2','page3','page4','page5','page6','play','stop'},
funcTime={0,0,0,0,0,0,0,0},
time={
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
},
{
{{sfx='ready'}, {sfx='start'}, {}, {}, {sfx='move'}, {sfx='lock'}, {sfx='drop'}, {sfx='fall'},},
{{sfx='hold'}, {sfx='prehold'}, {}, {}, {sfx='clear_1'},{sfx='clear_2'},{sfx='clear_3'},{sfx='clear_4'}},
{{sfx='prerotate'}, {sfx='rotate'}, {sfx='rotatekick'}, {}, {voc='single'}, {voc='double'}, {voc='triple'}, {voc='techrash'}},
{{sfx='finesseError'},{sfx='finesseError_long'},{sfx='drop_cancel'},{}, {sfx='spin_0'}, {sfx='spin_1'}, {sfx='spin_2'}, {sfx='spin_3'}},
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {}, {sfx='warning'},{sfx='reach'}, {sfx='pc'}},
{{sfx='ren_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {}, {sfx='collect'},{sfx='emit'}, {sfx='blip_1'}},
{{sfx='ren_9'}, {sfx='ren_10'}, {sfx='ren_11'}, {sfx='ren_mega'},{voc='win'}, {voc='lose'}, {sfx='win'}, {sfx='fail'}},
{{sfx='spawn_1'}, {sfx='spawn_2'}, {sfx='spawn_3'}, {sfx='spawn_4'}, {sfx='spawn_5'},{sfx='spawn_6'},{sfx='spawn_7'},{}},
},
{
{{voc='mini'}, {voc='b2b'}, {voc='b3b'}, {voc='perfect_clear'},{voc='half_clear'},{}, {}, {}},
{{voc='zspin'}, {voc='sspin'}, {voc='jspin'}, {voc='lspin'}, {voc='tspin'}, {voc='ospin'}, {voc='ispin'},{}},
{{voc='pspin'}, {voc='qspin'}, {voc='fspin'}, {voc='espin'}, {voc='uspin'}, {voc='vspin'}, {voc='wspin'},{voc='xspin'}},
{{voc='rspin'}, {voc='yspin'}, {voc='nspin'}, {voc='hspin'}, {voc='cspin'}, {}, {}, {}},
{{voc='single'}, {voc='double'},{voc='triple'},{voc='techrash'}, {voc='pentacrash'},{voc='hexacrash'},{}, {}},
{{voc='win'}, {voc='lose'}, {}, {}, {}, {}, {}, {}},
{{voc='welcome'},{voc='bye'}, {}, {}, {}, {}, {}, {}},
{{}, {}, {}, {}, {}, {}, {}, {}},
},
{
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
},
{
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
},
{
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
},
{
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
},
}
function scene.sceneInit()
mini,b2b,b3b,pc=false,false,false,false
function scene.mouseDown(x,y)
scene.touchDown(x,y)
end
function scene.touchDown(x,y)
x,y=int((x-pad.x)*pad.k/80),int((y-pad.y)*pad.k/80+1)
print(x,y)
if y>=1 and y<=8 then
if x==0 then
local k=pad.func[y]
if k:find('page')then
pad.page=tonumber(k:sub(5))
elseif k=="play"then
BGM.seek(0)
BGM.play(BGM.nowPlay)
elseif k=="stop"then
BGM.stop()
end
pad.funcTime[y]=1
elseif x>=1 and x<=8 then
local k=pad[pad.page][y][x]
if k.sfx then
SFX.play(k.sfx)
elseif k.voc then
VOC.play(k.voc)
end
pad.time[y][x]=1
end
end
end
local blockName={'z','s','j','l','t','o','i'}
local lineCount={'single','double','triple','techrash'}
function scene.keyDown(key,isRep)
if isRep then return end
if key=="1"then
mini=not mini
elseif key=="2"then
b2b=not b2b
if b2b then b3b=false end
elseif key=="3"then
b3b=not b3b
if b3b then b2b=false end
elseif key=="4"then
pc=not pc
elseif type(key)=='number'then
local CHN=VOC.getFreeChannel()
if b2b then
VOC.play('b2b',CHN)
elseif b3b then
VOC.play('b3b',CHN)
end
if mini then
VOC.play('mini',CHN)
end
if key>=10 then
VOC.play(blockName[math.floor(key/10)].."spin",CHN)
end
if lineCount[key%10]then
VOC.play(lineCount[key%10],CHN)
end
if pc then
VOC.play('perfect_clear',CHN)
end
elseif key=="tab"then
SCN.swapTo('music','none')
elseif key=="escape"then
@@ -46,75 +125,67 @@ function scene.keyDown(key,isRep)
end
end
function scene.update(dt)
for y=1,8 do
if pad.funcTime[y]>0 then
pad.funcTime[y]=max(pad.funcTime[y]-dt*2,0)
end
end
for y=1,8 do
for x=1,8 do
if pad.time[y][x]>0 then
pad.time[y][x]=max(pad.time[y][x]-dt*4,0)
end
end
end
end
function scene.draw()
local white=COLOR.Z
gc_push('transform')
gc_translate(pad.x,pad.y)
gc_scale(pad.k)
gc_setLineWidth(2)
--Pad frame
gc_setColor(white)
gc_rectangle('line',-3,-3,726,646,2)
--Buttons
for y=1,8 do
gc_setColor(white)
gc_circle('line',40,(y-1)*80+40,34)
if pad.funcTime[y]>0 then
gc_setColor(1,1,1,pad.funcTime[y]*.7)
gc_circle('fill',40,(y-1)*80+40,34)
end
end
for y=1,8 do
for x=1,8 do
gc_setColor(white)
gc_rectangle('line',x*80+2,(y-1)*80+2,76,76,5)
local k=pad[pad.page][y][x]
if k.sfx then
gc_rectangle('line',x*80+40-10,(y-1)*80+40-10,20,20,2)
elseif k.voc then
gc_circle('line',x*80+40,(y-1)*80+40,6)
end
if pad.time[y][x]>0 then
gc_setColor(1,1,1,pad.time[y][x]*.7)
gc_rectangle('fill',x*80+2,(y-1)*80+2,76,76,5)
end
end
end
gc_pop()
end
scene.widgetList={
WIDGET.newText{name="title", x=30, y=15,font=70,align='L'},
WIDGET.newSlider{name="sfx", x=510, y=60,w=330,font=35,change=function()SFX.play('blip_1')end,disp=SETval('sfx'),sound=false,code=SETsto('sfx')},
WIDGET.newSlider{name="voc", x=510, y=120,w=330,font=35,change=function()VOC.play('test')end,disp=SETval('voc'),sound=false,code=SETsto('voc')},
WIDGET.newKey{name="move", x=110, y=140,w=160,h=50,font=20,sound=false,code=function()SFX.play('move')end},
WIDGET.newKey{name="lock", x=110, y=205,w=160,h=50,font=20,sound=false,code=function()SFX.play('lock')end},
WIDGET.newKey{name="drop", x=110, y=270,w=160,h=50,font=20,sound=false,code=function()SFX.play('drop')end},
WIDGET.newKey{name="fall", x=110, y=335,w=160,h=50,font=20,sound=false,code=function()SFX.play('fall')end},
WIDGET.newKey{name="rotate", x=110, y=400,w=160,h=50,font=20,sound=false,code=function()SFX.play('rotate')end},
WIDGET.newKey{name="rotatekick",x=110, y=465,w=160,h=50,font=20,sound=false,code=function()SFX.play('rotatekick')end},
WIDGET.newKey{name="hold", x=110, y=530,w=160,h=50,font=20,sound=false,code=function()SFX.play('hold')end},
WIDGET.newKey{name="prerotate", x=110, y=595,w=160,h=50,font=20,sound=false,code=function()SFX.play('prerotate')end},
WIDGET.newKey{name="prehold", x=110, y=660,w=160,h=50,font=20,sound=false,code=function()SFX.play('prehold')end},
WIDGET.newKey{name="clear1", x=280, y=140,w=160,h=50,font=20,sound=false,code=function()SFX.play('clear_1')end},
WIDGET.newKey{name="clear2", x=280, y=205,w=160,h=50,font=20,sound=false,code=function()SFX.play('clear_2')end},
WIDGET.newKey{name="clear3", x=280, y=270,w=160,h=50,font=20,sound=false,code=function()SFX.play('clear_3')end},
WIDGET.newKey{name="clear4", x=280, y=335,w=160,h=50,font=20,sound=false,code=function()SFX.play('clear_4')end},
WIDGET.newKey{name="spin0", x=280, y=400,w=160,h=50,font=20,sound=false,code=function()SFX.play('spin_0')end},
WIDGET.newKey{name="spin1", x=280, y=465,w=160,h=50,font=20,sound=false,code=function()SFX.play('spin_1')end},
WIDGET.newKey{name="spin2", x=280, y=530,w=160,h=50,font=20,sound=false,code=function()SFX.play('spin_2')end},
WIDGET.newKey{name="spin3", x=280, y=595,w=160,h=50,font=20,sound=false,code=function()SFX.play('spin_3')end},
WIDGET.newKey{name="_pc", x=280, y=660,w=160,h=50,font=20,sound=false,code=function()SFX.play('clear')end},
WIDGET.newKey{name="_1", x=970, y=75,w=140,h=50,font=20,sound=false,code=pressKey(1)},
WIDGET.newKey{name="_2", x=1130, y=75,w=140,h=50,font=20,sound=false,code=pressKey(2)},
WIDGET.newKey{name="_3", x=970, y=140,w=140,h=50,font=20,sound=false,code=pressKey(3)},
WIDGET.newKey{name="_4", x=1130, y=140,w=140,h=50,font=20,sound=false,code=pressKey(4)},
WIDGET.newKey{name="z0", x=650, y=205,w=140,h=50,font=20,sound=false,code=pressKey(10)},
WIDGET.newKey{name="z1", x=650, y=270,w=140,h=50,font=20,sound=false,code=pressKey(11)},
WIDGET.newKey{name="z2", x=650, y=335,w=140,h=50,font=20,sound=false,code=pressKey(12)},
WIDGET.newKey{name="z3", x=650, y=400,w=140,h=50,font=20,sound=false,code=pressKey(13)},
WIDGET.newKey{name="t0", x=650, y=465,w=140,h=50,font=20,sound=false,code=pressKey(50)},
WIDGET.newKey{name="t1", x=650, y=530,w=140,h=50,font=20,sound=false,code=pressKey(51)},
WIDGET.newKey{name="t2", x=650, y=595,w=140,h=50,font=20,sound=false,code=pressKey(52)},
WIDGET.newKey{name="t3", x=650, y=660,w=140,h=50,font=20,sound=false,code=pressKey(53)},
WIDGET.newKey{name="s0", x=810, y=205,w=140,h=50,font=20,sound=false,code=pressKey(20)},
WIDGET.newKey{name="s1", x=810, y=270,w=140,h=50,font=20,sound=false,code=pressKey(21)},
WIDGET.newKey{name="s2", x=810, y=335,w=140,h=50,font=20,sound=false,code=pressKey(22)},
WIDGET.newKey{name="s3", x=810, y=400,w=140,h=50,font=20,sound=false,code=pressKey(23)},
WIDGET.newKey{name="o0", x=810, y=465,w=140,h=50,font=20,sound=false,code=pressKey(60)},
WIDGET.newKey{name="o1", x=810, y=530,w=140,h=50,font=20,sound=false,code=pressKey(61)},
WIDGET.newKey{name="o2", x=810, y=595,w=140,h=50,font=20,sound=false,code=pressKey(62)},
WIDGET.newKey{name="o3", x=810, y=660,w=140,h=50,font=20,sound=false,code=pressKey(63)},
WIDGET.newKey{name="j0", x=970, y=205,w=140,h=50,font=20,sound=false,code=pressKey(30)},
WIDGET.newKey{name="j1", x=970, y=270,w=140,h=50,font=20,sound=false,code=pressKey(31)},
WIDGET.newKey{name="j2", x=970, y=335,w=140,h=50,font=20,sound=false,code=pressKey(32)},
WIDGET.newKey{name="j3", x=970, y=400,w=140,h=50,font=20,sound=false,code=pressKey(33)},
WIDGET.newKey{name="i0", x=970, y=465,w=140,h=50,font=20,sound=false,code=pressKey(70)},
WIDGET.newKey{name="i1", x=970, y=530,w=140,h=50,font=20,sound=false,code=pressKey(71)},
WIDGET.newKey{name="i2", x=970, y=595,w=140,h=50,font=20,sound=false,code=pressKey(72)},
WIDGET.newKey{name="i3", x=970, y=660,w=140,h=50,font=20,sound=false,code=pressKey(73)},
WIDGET.newKey{name="l0", x=1130, y=205,w=140,h=50,font=20,sound=false,code=pressKey(40)},
WIDGET.newKey{name="l1", x=1130, y=270,w=140,h=50,font=20,sound=false,code=pressKey(41)},
WIDGET.newKey{name="l2", x=1130, y=335,w=140,h=50,font=20,sound=false,code=pressKey(42)},
WIDGET.newKey{name="l3", x=1130, y=400,w=140,h=50,font=20,sound=false,code=pressKey(43)},
WIDGET.newSwitch{name="mini", x=515, y=465,font=25,disp=function()return mini end,sound=false,code=pressKey"1"},
WIDGET.newSwitch{name="b2b", x=515, y=530,font=25,disp=function()return b2b end,sound=false,code=pressKey"2"},
WIDGET.newSwitch{name="b3b", x=515, y=595,font=25,disp=function()return b3b end,sound=false,code=pressKey"3"},
WIDGET.newSwitch{name="pc", x=515, y=660,font=25,disp=function()return pc end,sound=false,code=pressKey"4"},
WIDGET.newButton{name="music", 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,fText=TEXTURE.back,code=backScene},
WIDGET.newText{name="title", x=640, y=-5, font=50},
WIDGET.newSlider{name="bgm", x=1000,y=80, lim=130,w=250,disp=SETval('bgm'),code=function(v)SETTING.bgm=v BGM.freshVolume()end},
WIDGET.newSlider{name="sfx", x=1000,y=150,lim=130,w=250,disp=SETval('sfx'),code=SETsto('sfx'),change=function()SFX.play('blip_1')end},
WIDGET.newSlider{name="voc", x=1000,y=220,lim=130,w=250,disp=SETval('voc'),code=SETsto('voc'),change=function()VOC.play('test')end},
WIDGET.newButton{name="music",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,fText=TEXTURE.back,code=backScene},
}
return scene