51 lines
1.9 KiB
Lua
51 lines
1.9 KiB
Lua
bgml.require("core/logging")
|
|
bgml.config = {}
|
|
|
|
-- Returns a config table.
|
|
-- somemod.config_table['some_index'] = true
|
|
--- somemod.config_table.some_index == true
|
|
-- somemod.config_table['some_index'] = true
|
|
-- [engine.conf] somemodname.some_index = false
|
|
--- somemod.config_table.some_index == false
|
|
function bgml.config.config_factory()
|
|
local modname = engine.get_current_modname()
|
|
|
|
-- This function wraps around engine.setting_get[bool] to check if the default should be overriden.
|
|
local function get(setting, default)
|
|
if type(default) == "boolean" then
|
|
local read = engine.settings:get_bool(modname.."."..setting)
|
|
if read == nil then
|
|
return default
|
|
else
|
|
return read
|
|
end
|
|
elseif type(default) == "string" then
|
|
return engine.settings:get(modname.."."..setting) or default
|
|
elseif type(default) == "number" then
|
|
return tonumber(engine.settings:get(modname.."."..setting) or default)
|
|
else
|
|
error(("Unknown format for configuration key '%s': %s"):format(setting, type(default)))
|
|
end
|
|
end
|
|
|
|
-- The returned table should set defaults upon a new index, and use get() upon an index.
|
|
return setmetatable({
|
|
_defaults = {},
|
|
}, {
|
|
__index = function(self, key)
|
|
local default = self._defaults[key]
|
|
-- If there is no default then the setting should not be used.
|
|
if default == nil then
|
|
return error(("'%s' is not a configuration option"):format(key))
|
|
end
|
|
return get(key, default)
|
|
end,
|
|
__newindex = function(self, key, value)
|
|
self._defaults[key] = value
|
|
if bgml.internal.config.log_config then
|
|
bgml.internal.log(("[config] %s.%s = %s (default: %s)"):format(modname, tostring(key), dump(get(key, value)), dump(value)))
|
|
end
|
|
end,
|
|
})
|
|
end
|