101 lines
3.3 KiB
Lua
101 lines
3.3 KiB
Lua
ConfigurationWindow = {
|
|
controls = {},
|
|
selected_control = 1,
|
|
}
|
|
|
|
function ConfigurationWindow.init()
|
|
ConfigurationWindow.controls = {
|
|
UI.create_action_item(
|
|
"Save",
|
|
function() Config.save() end
|
|
),
|
|
UI.create_action_item(
|
|
"Restore Defaults",
|
|
function() Config.restore_defaults() end
|
|
),
|
|
}
|
|
end
|
|
|
|
function ConfigurationWindow.draw()
|
|
UI.draw_top_bar("Configuration")
|
|
|
|
local x_start = 10 -- Left margin for labels
|
|
local y_start = 40
|
|
local x_value_right_align = Config.screen.width - 10 -- Right margin for values
|
|
local char_width = 4 -- Approximate character width for default font
|
|
|
|
for i, control in ipairs(ConfigurationWindow.controls) do
|
|
local current_y = y_start + (i - 1) * 12
|
|
local color = Config.colors.green
|
|
|
|
if control.type == "numeric_stepper" then
|
|
local value = control.get()
|
|
local label_text = control.label
|
|
local value_text = string.format(control.format, value)
|
|
|
|
-- Calculate x position for right-aligned value
|
|
local value_x = x_value_right_align - (#value_text * char_width)
|
|
|
|
if i == ConfigurationWindow.selected_control then
|
|
color = Config.colors.item
|
|
Print.text("<", x_start -8, current_y, color)
|
|
Print.text(label_text, x_start, current_y, color) -- Shift label due to '<'
|
|
Print.text(value_text, value_x, current_y, color)
|
|
Print.text(">", x_value_right_align + 4, current_y, color) -- Print '>' after value
|
|
else
|
|
Print.text(label_text, x_start, current_y, color)
|
|
Print.text(value_text, value_x, current_y, color)
|
|
end
|
|
elseif control.type == "action_item" then
|
|
local label_text = control.label
|
|
if i == ConfigurationWindow.selected_control then
|
|
color = Config.colors.item
|
|
Print.text("<", x_start -8, current_y, color)
|
|
Print.text(label_text, x_start, current_y, color)
|
|
Print.text(">", x_start + 8 + (#label_text * char_width) + 4, current_y, color)
|
|
else
|
|
Print.text(label_text, x_start, current_y, color)
|
|
end
|
|
end
|
|
end
|
|
|
|
Print.text("Press B to go back", x_start, 120, Config.colors.light_grey)
|
|
end
|
|
|
|
function ConfigurationWindow.update()
|
|
if Input.menu_back() then
|
|
GameWindow.set_state(WINDOW_MENU)
|
|
return
|
|
end
|
|
|
|
if Input.up() then
|
|
ConfigurationWindow.selected_control = ConfigurationWindow.selected_control - 1
|
|
if ConfigurationWindow.selected_control < 1 then
|
|
ConfigurationWindow.selected_control = #ConfigurationWindow.controls
|
|
end
|
|
elseif Input.down() then
|
|
ConfigurationWindow.selected_control = ConfigurationWindow.selected_control + 1
|
|
if ConfigurationWindow.selected_control > #ConfigurationWindow.controls then
|
|
ConfigurationWindow.selected_control = 1
|
|
end
|
|
end
|
|
|
|
local control = ConfigurationWindow.controls[ConfigurationWindow.selected_control]
|
|
if control then
|
|
if control.type == "numeric_stepper" then
|
|
local current_value = control.get()
|
|
if btnp(2) then -- Left
|
|
local new_value = math.max(control.min, current_value - control.step)
|
|
control.set(new_value)
|
|
elseif btnp(3) then -- Right
|
|
local new_value = math.min(control.max, current_value + control.step)
|
|
control.set(new_value)
|
|
end
|
|
elseif control.type == "action_item" then
|
|
if Input.menu_confirm() then
|
|
control.action()
|
|
end
|
|
end
|
|
end
|
|
end
|