local gc=love.graphics local ins=table.insert local mStr=GC.mStr 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,KEY_MAP.keyboard do ins(keyList[v],{COLOR.lB,k}) end for k,v in next,KEY_MAP.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(KEY_MAP,'conf/key') end local forbbidenKeys={ ["\\"]=true, ["return"]=true, } function scene.keyDown(key,isRep) if isRep then return end if key=="escape"then if selected then selected=false else SCN.back() end elseif key=="backspace"then if selected then for k,v in next,KEY_MAP.keyboard do if v==selected then KEY_MAP.keyboard[k]=nil end end _freshKeyList() selected=false SFX.play('finesseError',.5) end elseif selected then if not forbbidenKeys[key]then KEY_MAP.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,KEY_MAP.joystick do if v==selected then KEY_MAP.joystick[k]=nil end end _freshKeyList() selected=false SFX.play('finesseError',.5) else SCN.back() end elseif selected then KEY_MAP.joystick[key]=selected _freshKeyList() selected=false SFX.play('reach',.5) else WIDGET.gamepadPressed(key) end end function scene.draw() setFont(20) gc.setColor(COLOR.Z) gc.printf(text.keySettingInstruction,540,620,500,'right') 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 or i>0 and 60*i-23 or 667 )-font*.7 ) end end if selected then gc.setLineWidth(3) gc.setColor(COLOR[TIME()%.26<.13 and'F'or'Y']) gc.rectangle('line', selected>10 and 910 or 270, selected>10 and 60*(selected-10)-50 or selected>0 and 60*selected-50 or 640, 360,60 ) 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=60,fText=CHAR.icon.back,code=backScene}, } return scene