78 lines
2.8 KiB
Lua
78 lines
2.8 KiB
Lua
|
|
Cartomancer.save_config = function ()
|
|
Cartomancer.log "Saving cartomancer config..."
|
|
love.filesystem.write('config/cartomancer.jkr', "return " .. Cartomancer.dump(Cartomancer.SETTINGS))
|
|
end
|
|
|
|
-- Logic for keeping config tables up to date
|
|
local function remove_unused_keys(from_table, template)
|
|
for k, v in pairs(from_table) do
|
|
if template[k] == nil then
|
|
Cartomancer.log("Removing setting `"..k.. "` because it is not in default config")
|
|
from_table[k] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
local function add_missing_keys(to_table, template)
|
|
for k, v in pairs(template) do
|
|
if to_table[k] == nil then
|
|
Cartomancer.log("Adding setting `"..k.. "` because it is missing in latest config")
|
|
to_table[k] = v
|
|
end
|
|
end
|
|
end
|
|
|
|
Cartomancer.load_config = function ()
|
|
Cartomancer.log "Starting to load config"
|
|
if not love.filesystem.getInfo('config') then
|
|
Cartomancer.log("Creating config folder...")
|
|
love.filesystem.createDirectory('config')
|
|
end
|
|
|
|
-- Steamodded config file location
|
|
local config_file = love.filesystem.read('config/cartomancer.jkr')
|
|
local latest_default_config = Cartomancer.load_mod_file('config.lua', 'default-config')
|
|
|
|
if config_file then
|
|
Cartomancer.log "Reading config file: "
|
|
Cartomancer.log(config_file)
|
|
Cartomancer.SETTINGS = STR_UNPACK(config_file) -- Use STR_UNPACK to avoid code injectons via config files
|
|
else
|
|
Cartomancer.log "Creating default settings"
|
|
Cartomancer.SETTINGS = latest_default_config
|
|
Cartomancer.save_config()
|
|
end
|
|
|
|
remove_unused_keys(Cartomancer.SETTINGS, latest_default_config)
|
|
add_missing_keys(Cartomancer.SETTINGS, latest_default_config)
|
|
|
|
remove_unused_keys(Cartomancer.SETTINGS.keybinds, latest_default_config.keybinds)
|
|
add_missing_keys(Cartomancer.SETTINGS.keybinds, latest_default_config.keybinds)
|
|
|
|
Cartomancer.log "Successfully loaded config: "
|
|
Cartomancer.log(Cartomancer.SETTINGS)
|
|
end
|
|
|
|
local cart_options_ref = G.FUNCS.options
|
|
G.FUNCS.options = function(e)
|
|
if Cartomancer.INTERNAL_in_config then
|
|
Cartomancer.INTERNAL_in_config = false
|
|
if Cartomancer._recording_keybind then
|
|
Cartomancer.log "Quit config, stopping to record keybind"
|
|
Cartomancer._recording_keybind = nil
|
|
end
|
|
Cartomancer.save_config()
|
|
end
|
|
return cart_options_ref(e)
|
|
end
|
|
|
|
local settings_tab_ref = G.UIDEF.settings_tab
|
|
function G.UIDEF.settings_tab(tab)
|
|
if Cartomancer._recording_keybind then
|
|
Cartomancer.log "Changed settings tab, stopping to record keybind"
|
|
Cartomancer._recording_keybind = nil
|
|
end
|
|
-- Maybe I should port cartomancer settings to use this function as well? but it would still not work with other mods that add custom tabs :sob:
|
|
return settings_tab_ref(tab)
|
|
end |