2019-05-22 22:57:34 -05:00
local ConfigScene = Scene : extend ( )
ConfigScene.title = " Input Config "
require ' load.save '
local configurable_inputs = {
2020-11-08 15:19:01 -06:00
" menu_decide " ,
" menu_back " ,
2019-05-22 22:57:34 -05:00
" left " ,
2020-11-06 19:49:44 -06:00
" right " ,
" up " ,
" down " ,
2019-05-22 22:57:34 -05:00
" rotate_left " ,
" rotate_left2 " ,
2020-11-06 19:49:44 -06:00
" rotate_right " ,
" rotate_right2 " ,
" rotate_180 " ,
" hold " ,
" retry " ,
2019-05-22 22:57:34 -05:00
}
2020-11-08 14:55:06 -06:00
local function newSetInputs ( )
2020-11-08 15:19:01 -06:00
local set_inputs = { }
for i , input in ipairs ( configurable_inputs ) do
set_inputs [ input ] = false
end
return set_inputs
2020-11-08 14:55:06 -06:00
end
2019-05-22 22:57:34 -05:00
function ConfigScene : new ( )
self.input_state = 1
2020-11-08 15:19:01 -06:00
self.set_inputs = newSetInputs ( )
self.new_input = { }
2020-10-09 17:43:22 -05:00
2020-10-10 20:17:48 -05:00
DiscordRPC : update ( {
2020-11-06 19:49:44 -06:00
details = " In menus " ,
state = " Changing input config " ,
} )
2019-05-22 22:57:34 -05:00
end
function ConfigScene : update ( )
end
function ConfigScene : render ( )
2020-10-09 12:44:48 -05:00
love.graphics . setColor ( 1 , 1 , 1 , 1 )
love.graphics . draw (
backgrounds [ " input_config " ] ,
0 , 0 , 0 ,
0.5 , 0.5
)
2020-10-09 17:43:22 -05:00
2019-05-22 22:57:34 -05:00
love.graphics . setFont ( font_3x5_2 )
2020-11-08 14:55:06 -06:00
for i , input in ipairs ( configurable_inputs ) do
2020-11-06 19:49:44 -06:00
love.graphics . printf ( input , 40 , 50 + i * 20 , 200 , " left " )
2020-11-08 15:19:01 -06:00
if self.set_inputs [ input ] then
love.graphics . printf ( self.set_inputs [ input ] , 240 , 50 + i * 20 , 300 , " left " )
end
end
2019-05-22 22:57:34 -05:00
if self.input_state > table.getn ( configurable_inputs ) then
2020-11-08 15:06:29 -06:00
love.graphics . print ( " press enter to confirm, delete/backspace to retry " .. ( config.input and " , escape to cancel " or " " ) )
2019-05-22 22:57:34 -05:00
else
2020-11-08 14:55:06 -06:00
love.graphics . print ( " press key or joystick input for " .. configurable_inputs [ self.input_state ] .. " , tab to skip " .. ( config.input and " , escape to cancel " or " " ) , 0 , 0 )
2020-11-08 15:19:01 -06:00
love.graphics . print ( " enter, delete, backspace, tab, arrows, and escape can't be changed " , 0 , 20 )
2019-05-22 22:57:34 -05:00
end
end
2020-11-08 14:55:06 -06:00
local function addJoystick ( input , name )
2020-11-08 15:19:01 -06:00
if not input.joysticks then
input.joysticks = { }
end
if not input.joysticks [ name ] then
input.joysticks [ name ] = { }
end
2020-11-08 14:55:06 -06:00
end
function ConfigScene : onInputPress ( e )
2020-11-08 15:19:01 -06:00
if e.type == " key " then
-- enter, delete, backspace, tab, arrows, and escape are reserved and can't be remapped
if e.scancode == " escape " and config.input then
scene = TitleScene ( )
elseif self.input_state > table.getn ( configurable_inputs ) then
if e.scancode == " return " then
-- save new input, then load next scene
config.input = self.new_input
saveConfig ( )
scene = TitleScene ( )
elseif e.scancode == " delete " or e.scancode == " backspace " then
-- retry
self.input_state = 1
self.set_inputs = newSetInputs ( )
self.new_input = { }
elseif e.scancode == " escape " and config.input then
-- cancel only if there was an input config already
scene = TitleScene ( )
end
elseif
e.scancode ~= " delete " and
e.scancode ~= " backspace " and
e.scancode ~= " return " and
e.scancode ~= " left " and
e.scancode ~= " right " and
e.scancode ~= " up " and
e.scancode ~= " down "
then
if e.scancode == " tab " then
self.set_inputs [ configurable_inputs [ self.input_state ] ] = " skipped "
self.input_state = self.input_state + 1
else
if not self.new_input . keys then
self.new_input . keys = { }
end
self.set_inputs [ configurable_inputs [ self.input_state ] ] = " key " .. love.keyboard . getKeyFromScancode ( e.scancode ) .. " ( " .. e.scancode .. " ) "
self.new_input . keys [ e.scancode ] = configurable_inputs [ self.input_state ]
self.input_state = self.input_state + 1
end
end
elseif string.sub ( e.type , 1 , 3 ) == " joy " then
if self.input_state <= table.getn ( configurable_inputs ) then
if e.type == " joybutton " then
addJoystick ( self.new_input , e.name )
if not self.new_input . joysticks [ e.name ] . buttons then
self.new_input . joysticks [ e.name ] . buttons = { }
end
self.set_inputs [ configurable_inputs [ self.input_state ] ] =
" jbtn " ..
e.button ..
" " .. string.sub ( e.name , 1 , 10 ) .. ( string.len ( e.name ) > 10 and " ... " or " " )
self.new_input . joysticks [ e.name ] . buttons [ e.button ] = configurable_inputs [ self.input_state ]
self.input_state = self.input_state + 1
elseif e.type == " joyaxis " then
if math.abs ( e.value ) >= 0.5 then
addJoystick ( self.new_input , e.name )
if not self.new_input . joysticks [ e.name ] . axes then
self.new_input . joysticks [ e.name ] . axes = { }
end
if not self.new_input . joysticks [ e.name ] . axes [ e.axis ] then
self.new_input . joysticks [ e.name ] . axes [ e.axis ] = { }
end
self.set_inputs [ configurable_inputs [ self.input_state ] ] =
" jaxis " ..
( e.value >= 0.5 and " + " or " - " ) .. e.axis ..
" " .. string.sub ( e.name , 1 , 10 ) .. ( string.len ( e.name ) > 10 and " ... " or " " )
self.new_input . joysticks [ e.name ] . axes [ e.axis ] [ e.value >= 0.5 and " positive " or " negative " ] = configurable_inputs [ self.input_state ]
self.input_state = self.input_state + 1
end
elseif e.type == " joyhat " then
if e.direction ~= " c " then
addJoystick ( self.new_input , e.name )
if not self.new_input . joysticks [ e.name ] . hats then
self.new_input . joysticks [ e.name ] . hats = { }
end
if not self.new_input . joysticks [ e.name ] . hats [ e.hat ] then
self.new_input . joysticks [ e.name ] . hats [ e.hat ] = { }
end
self.set_inputs [ configurable_inputs [ self.input_state ] ] =
" jhat " ..
e.hat .. " " .. e.direction ..
" " .. string.sub ( e.name , 1 , 10 ) .. ( string.len ( e.name ) > 10 and " ... " or " " )
self.new_input . joysticks [ e.name ] . hats [ e.hat ] [ e.direction ] = configurable_inputs [ self.input_state ]
self.input_state = self.input_state + 1
end
end
end
end
2019-05-22 22:57:34 -05:00
end
return ConfigScene