valleys_mapgen/settings.lua

111 lines
4.3 KiB
Lua

vmg.settings = Settings(minetest.get_worldpath() .. "/vmg.conf") -- Create settings object
local function define_str(flag, default, write_to_config)
local value = vmg.settings:get(flag)
if value then -- This flag exists in vmg.conf, return its value
return value, true
else
local on_config = minetest.settings:get("vmg_" .. flag) -- get this flag in minetest.conf
if on_config then -- This flag exists in minetest.conf, so return its value
vmg.settings:set(flag, on_config)
return on_config, false
else -- Flag don't exist anywhere, so the default value will be written in settings and returned
if write_to_config then
minetest.settings:set("vmg_" .. flag, default) -- write to minetest.conf if write_to_config is enabled (usually disabled)
end
vmg.settings:set(flag, default) -- write to vmg.conf
return default, false -- return default value
end
end
end
local function define_num(flag, default, write_to_config)
local value = vmg.settings:get(flag)
if value then -- This flag exists in vmg.conf, return its value
return tonumber(value), true
else
local on_config = minetest.settings:get("vmg_" .. flag) -- get this flag in minetest.conf
if on_config then -- This flag exists in minetest.conf, so return its value
vmg.settings:set(flag, on_config)
return tonumber(on_config), false
else -- Flag don't exist anywhere, so the default value will be written in settings and returned
if write_to_config then
minetest.settings:set("vmg_" .. flag, default) -- write to minetest.conf if write_to_config is enabled (usually disabled)
end
vmg.settings:set(flag, default) -- write to vmg.conf
return tonumber(default), false -- return default value
end
end
end
local function define_bool(flag, default, write_to_config)
local value = vmg.settings:get_bool(flag)
if value then -- This flag exists in vmg.conf, return its value
return value, true
else
local on_config = minetest.settings:get_bool("vmg_" .. flag) -- get this flag in minetest.conf
if on_config then -- This flag exists in minetest.conf, so return its value
vmg.settings:set_bool(flag, on_config)
return on_config, false
else -- Flag don't exist anywhere, so the default value will be written in settings and returned
if write_to_config then
minetest.settings:set_bool("vmg_" .. flag, default) -- write to minetest.conf if write_to_config is enabled (usually disabled)
end
vmg.settings:set_bool(flag, default) -- write to vmg.conf
return default, false -- return default value
end
end
end
local function define_noise(flag, default, write_to_config)
local value = vmg.settings:get_np_group(flag)
if value then -- This flag exists in vmg.conf, return its value
return value, true
else
local on_config = minetest.settings:get_np_group("vmg_" .. flag) -- get this flag in minetest.conf
if on_config then -- This flag exists in minetest.conf, so return its value
vmg.settings:set_np_group(flag, on_config)
return on_config, false
else -- Flag don't exist anywhere, so the default value will be written in settings and returned
if write_to_config then
minetest.settings:set_np_group("vmg_" .. flag, default) -- write to minetest.conf if write_to_config is enabled (usually disabled)
end
vmg.settings:set_np_group(flag, default) -- write to vmg.conf
return default, false -- return default value
end
end
end
local definefunc = {
string = define_str,
number = define_num,
boolean = define_bool,
table = define_noise,
}
function vmg.define(flag, default, write_to_config)
local typeval = type(default) -- Select function from the type of the default value
local f = definefunc[typeval] -- Choose the appropriate function
if f then
return f(flag, default, write_to_config)
end
end
if vmg.loglevel >= 2 then
print("[Valleys Mapgen] Loading mapgen ...")
end
-- Choose the appropriate mapgen version
local version = vmg.define("version", vmg.version)
if vmg.valleys_c then
dofile(vmg.path .. "/mapgen_c.lua")
elseif version == vmg.version then
dofile(vmg.path .. "/mapgen.lua")
elseif not pcall(dofile, vmg.path .. "/old_mapgens/" .. version .. ".lua") then
print("[Valleys Mapgen] Missing compatibility mapgen for version " .. version .. ". Using latest version, you may see artifacts.")
end
-- Write settings after loading
minetest.after(0, function() vmg.settings:write() end)