local gc=love.graphics local ins=table.insert local mStr=GC.mStr local scene={} local selected-- if waiting for key local keyList local keyNames={ normal={ a='A',b='B',c='C',d='D',e='E',f='F',g='G', h='H',i='I',j='J',k='K',l='L',m='M',n='N', o='O',p='P',q='Q',r='R',s='S',t='T', u='U',v='V',w='W',x='X',y='Y',z='Z', f1='F1',f2='F2',f3='F3',f4='F4',f5='F5',f6='F6', f7='F7',f8='F8',f9='F9',f10='F10',f11='F11',f12='F12', backspace=CHAR.key.backspace, ['return']=CHAR.key.enter_or_return, kpenter='kp'..CHAR.key.enter_or_return, tab=CHAR.key.tab, capslock=CHAR.key.capslock, lshift='L shift', rshift='R shift', lctrl='L ctrl', rctrl='R ctrl', lalt='L alt', ralt='R alt', lgui='L'..CHAR.key.windows, rgui='R'..CHAR.key.windows, space=CHAR.key.space, delete='Del', pageup='PgUp', pagedown='PgDn', home='Home', [' end']='End', insert='Ins', numlock='Numlock', menu=CHAR.key.winMenu, up=CHAR.key.up, down=CHAR.key.down, left=CHAR.key.left, right=CHAR.key.right, }, apple={ kpenter=CHAR.key.macEnter, tab=CHAR.key.mactab, lshift='L'..CHAR.key.shift, rshift='R'..CHAR.key.shift, lctrl='L'..CHAR.key.macCtrl, rctrl='R'..CHAR.key.macCtrl, lalt='L'..CHAR.key.macOpt, ralt='R'..CHAR.key.macOpt, lgui='L'..CHAR.key.macCmd, rgui='R'..CHAR.key.macCmd, space=CHAR.key.space, delete=CHAR.key.macFowardDel, pageup=CHAR.key.macPgup, pagedown=CHAR.key.macPgdn, home=CHAR.key.macHome, [' end']=CHAR.key.macEnd, numlock=CHAR.key.clear, }, controller={ x=CHAR.controller.xboxX, y=CHAR.controller.xboxY, a=CHAR.controller.xboxA, b=CHAR.controller.xboxB, dpup=CHAR.controller.dpadU, dpdown=CHAR.controller.dpadD, dpleft=CHAR.controller.dpadL, dpright=CHAR.controller.dpadR, triggerleft=CHAR.controller.lt, triggerright=CHAR.controller.rt, leftshoulder=CHAR.controller.lb, rightshoulder=CHAR.controller.rb, leftstick_up=CHAR.controller.jsLU, leftstick_down=CHAR.controller.jsLD, leftstick_left=CHAR.controller.jsLL, leftstick_right=CHAR.controller.jsLR, rightstick_up=CHAR.controller.jsRU, rightstick_down=CHAR.controller.jsRD, rightstick_left=CHAR.controller.jsRL, rightstick_right=CHAR.controller.jsRR, }, }setmetatable(keyNames.apple,{__index=keyNames.normal}) local function _freshKeyList() keyList={} for i=0,20 do keyList[i]={} end local keynames=SYSTEM:find'OS' and keyNames.apple or keyNames.normal for k,v in next,KEY_MAP.keyboard do ins(keyList[v],{COLOR.lB,keynames[k] or k}) end for b,v in next,KEY_MAP.joystick do ins(keyList[v],{COLOR.lR,keyNames.controller[b] or b}) end end function scene.enter() selected=false _freshKeyList() BG.set('none') end function scene.leave() saveFile(KEY_MAP,'conf/key') end local forbbidenKeys={ ["\\"]=true, ["return"]=true, } function scene.keyDown(key,isRep) if isRep then return true 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 return true 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 return true end end function scene.draw() setFont(20) gc.setColor(COLOR.Z) gc.printf(text.keySettingInstruction,526,620,500,'right') for i=0,20 do for j=1,#keyList[i] do local key=keyList[i][j] local font=#key[2]<=4 and 35 or #key[2]<=7 and 25 or 15 setFont(font) mStr(key, (i>10 and 820 or 200)+80*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(TIME()%.26<.13 and COLOR.F or COLOR.Y) gc.rectangle('line', selected>10 and 860 or 240, selected>10 and 60*(selected-10)-50 or selected>0 and 60*selected-50 or 640, 400,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=150,y=40, w=180,h=60,font=25,code=function() _setSel(1) end}, WIDGET.newKey{name='a2',x=150,y=100,w=180,h=60,font=25,code=function() _setSel(2) end}, WIDGET.newKey{name='a3',x=150,y=160,w=180,h=60,font=25,code=function() _setSel(3) end}, WIDGET.newKey{name='a4',x=150,y=220,w=180,h=60,font=25,code=function() _setSel(4) end}, WIDGET.newKey{name='a5',x=150,y=280,w=180,h=60,font=25,code=function() _setSel(5) end}, WIDGET.newKey{name='a6',x=150,y=340,w=180,h=60,font=25,code=function() _setSel(6) end}, WIDGET.newKey{name='a7',x=150,y=400,w=180,h=60,font=25,code=function() _setSel(7) end}, WIDGET.newKey{name='a8',x=150,y=460,w=180,h=60,font=25,code=function() _setSel(8) end}, WIDGET.newKey{name='a9',x=150,y=520,w=180,h=60,font=25,code=function() _setSel(9) end}, WIDGET.newKey{name='a10',x=150,y=580,w=180,h=60,font=25,code=function() _setSel(10) end}, WIDGET.newKey{name='a11',x=770,y=40, w=180,h=60,font=25,code=function() _setSel(11) end}, WIDGET.newKey{name='a12',x=770,y=100,w=180,h=60,font=25,code=function() _setSel(12) end}, WIDGET.newKey{name='a13',x=770,y=160,w=180,h=60,font=25,code=function() _setSel(13) end}, WIDGET.newKey{name='a14',x=770,y=220,w=180,h=60,font=25,code=function() _setSel(14) end}, WIDGET.newKey{name='a15',x=770,y=280,w=180,h=60,font=25,code=function() _setSel(15) end}, WIDGET.newKey{name='a16',x=770,y=340,w=180,h=60,font=25,code=function() _setSel(16) end}, WIDGET.newKey{name='a17',x=770,y=400,w=180,h=60,font=25,code=function() _setSel(17) end}, WIDGET.newKey{name='a18',x=770,y=460,w=180,h=60,font=25,code=function() _setSel(18) end}, WIDGET.newKey{name='a19',x=770,y=520,w=180,h=60,font=25,code=function() _setSel(19) end}, WIDGET.newKey{name='a20',x=770,y=580,w=180,h=60,font=25,code=function() _setSel(20) end}, WIDGET.newKey{name='restart',x=150,y=670,w=180,h=60,code=function() _setSel(0) end}, WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene}, } return scene