Files
Techmino/parts/scenes/setting_key.lua
2021-01-27 19:33:24 +08:00

141 lines
3.8 KiB
Lua

local gc=love.graphics
local mStr=mStr
local ins=table.insert
local scene={}
local selected--if waiting for key
local keyList
local function freshKeyList()
keyList={}for i=0,20 do keyList[i]={}end
for k,v in next,keyMap.keyboard do
ins(keyList[v],{COLOR.lB,k})
end
for k,v in next,keyMap.joystick do
ins(keyList[v],{COLOR.lR,k})
end
end
function scene.sceneInit()
selected=false
freshKeyList()
BG.set("none")
end
function scene.sceneBack()
FILE.save(keyMap,"conf/key")
end
function scene.keyDown(key)
if key=="escape"then
if selected then
for k,v in next,keyMap.keyboard do
if v==selected then
keyMap.keyboard[k]=nil
end
end
freshKeyList()
selected=false
SFX.play("finesseError",.5)
else
SCN.back()
end
elseif selected then
if key~="\\"then
keyMap.keyboard[key]=selected
freshKeyList()
selected=false
SFX.play("reach",.5)
end
else
WIDGET.keyPressed(key)
end
end
function scene.gamepadDown(key)
if key=="back"then
if selected then
for k,v in next,keyMap.joystick do
if v==selected then
keyMap.joystick[k]=nil
end
end
freshKeyList()
selected=false
SFX.play("finesseError",.5)
else
SCN.back()
end
elseif selected then
keyMap.joystick[key]=selected
freshKeyList()
selected=false
SFX.play("reach",.5)
else
WIDGET.gamepadPressed(key)
end
end
function scene.draw()
setFont(15)
gc.setColor(1,1,1)
for i=0,20 do
for j=1,#keyList[i]do
local key=keyList[i][j]
local font=#key[2]==1 and 40 or #key[2]<6 and 30 or 15
setFont(font)
mStr(key,
(i>10 and 940 or 210)+100*j,
i>10 and 60*(i-10)-23-font*.7 or
i>0 and 60*i-23-font*.7 or
667-font*.7
)
end
end
if selected then
gc.setColor(COLOR[TIME()%.26<.13 and"R"or"Y"])
local x,y=selected>10 and 910 or 270, selected>10 and 60*(selected-10)-50 or selected>0 and 60*selected-50 or 630
setFont(40)gc.print("=",x,y)
setFont(10)gc.print("esc?",x,y+40)
end
end
local function setSel(i)
if selected==i then
selected=false
SFX.play("rotate",.5)
else
selected=i
SFX.play("lock",.5)
end
end
scene.widgetList={
WIDGET.newKey{name="a1", x=160,y=40,w=200,h=60,code=function()setSel(1)end},
WIDGET.newKey{name="a2", x=160,y=100,w=200,h=60,code=function()setSel(2)end},
WIDGET.newKey{name="a3", x=160,y=160,w=200,h=60,code=function()setSel(3)end},
WIDGET.newKey{name="a4", x=160,y=220,w=200,h=60,code=function()setSel(4)end},
WIDGET.newKey{name="a5", x=160,y=280,w=200,h=60,code=function()setSel(5)end},
WIDGET.newKey{name="a6", x=160,y=340,w=200,h=60,code=function()setSel(6)end},
WIDGET.newKey{name="a7", x=160,y=400,w=200,h=60,code=function()setSel(7)end},
WIDGET.newKey{name="a8", x=160,y=460,w=200,h=60,code=function()setSel(8)end},
WIDGET.newKey{name="a9", x=160,y=520,w=200,h=60,code=function()setSel(9)end},
WIDGET.newKey{name="a10", x=160,y=580,w=200,h=60,code=function()setSel(10)end},
WIDGET.newKey{name="a11", x=800,y=40,w=200,h=60,code=function()setSel(11)end},
WIDGET.newKey{name="a12", x=800,y=100,w=200,h=60,code=function()setSel(12)end},
WIDGET.newKey{name="a13", x=800,y=160,w=200,h=60,code=function()setSel(13)end},
WIDGET.newKey{name="a14", x=800,y=220,w=200,h=60,code=function()setSel(14)end},
WIDGET.newKey{name="a15", x=800,y=280,w=200,h=60,code=function()setSel(15)end},
WIDGET.newKey{name="a16", x=800,y=340,w=200,h=60,code=function()setSel(16)end},
WIDGET.newKey{name="a17", x=800,y=400,w=200,h=60,code=function()setSel(17)end},
WIDGET.newKey{name="a18", x=800,y=460,w=200,h=60,code=function()setSel(18)end},
WIDGET.newKey{name="a19", x=800,y=520,w=200,h=60,code=function()setSel(19)end},
WIDGET.newKey{name="a20", x=800,y=580,w=200,h=60,code=function()setSel(20)end},
WIDGET.newKey{name="restart",x=160,y=670,w=200,h=60,code=function()setSel(0)end},
WIDGET.newButton{name="back",x=1140,y=640,w=190,h=80,font=40,code=backScene},
}
return scene