local values = {}
local ti = 1
local index = 1
- for line in default:gmatch("[+-]?[%d.-e]+") do -- All numeric characters
- index = default:find("[+-]?[%d.-e]+", index) + line:len()
- table.insert(values, line)
+ for match in default:gmatch("[+-]?[%d.-e]+") do -- All numeric characters
+ index = default:find("[+-]?[%d.-e]+", index) + match:len()
+ table.insert(values, match)
ti = ti + 1
if ti > 9 then
break
-- read_all: whether to ignore certain setting types for GUI or not
-- parse_mods: whether to parse settingtypes.txt in mods and games
local function parse_config_file(read_all, parse_mods)
- local builtin_path = core.get_builtin_path() .. FILENAME
- local file = io.open(builtin_path, "r")
local settings = {}
- if not file then
- core.log("error", "Can't load " .. FILENAME)
- return settings
- end
- parse_single_file(file, builtin_path, read_all, settings, 0, true)
+ do
+ local builtin_path = core.get_builtin_path() .. FILENAME
+ local file = io.open(builtin_path, "r")
+ if not file then
+ core.log("error", "Can't load " .. FILENAME)
+ return settings
+ end
- file:close()
+ parse_single_file(file, builtin_path, read_all, settings, 0, true)
+
+ file:close()
+ end
if parse_mods then
-- Parse games
local file = io.open(path, "r")
if file then
if not games_category_initialized then
- local translation = fgettext_ne("Games"), -- not used, but needed for xgettext
+ fgettext_ne("Games") -- not used, but needed for xgettext
table.insert(settings, {
name = "Games",
level = 0,
local file = io.open(path, "r")
if file then
if not mods_category_initialized then
- local translation = fgettext_ne("Mods"), -- not used, but needed for xgettext
+ fgettext_ne("Mods") -- not used, but needed for xgettext
table.insert(settings, {
name = "Mods",
level = 0,
value.seed .. ", " ..
value.octaves .. ", " ..
value.persistence .. ", " ..
- value.lacunarity .. ", " ..
- value.flags
+ value.lacunarity
+ if value.flags ~= "" then
+ t = t .. ", " .. value.flags
+ end
end
return t
end
end
-- First row
height = height + 0.3
- add_field(0.3, "te_offset", "Offset", t[1])
- add_field(3.6, "te_scale", "Scale", t[2])
- add_field(6.9, "te_seed", "Seed", t[6])
+ add_field(0.3, "te_offset", fgettext("Offset"), t[1])
+ add_field(3.6, "te_scale", fgettext("Scale"), t[2])
+ add_field(6.9, "te_seed", fgettext("Seed"), t[6])
height = height + 1.1
-- Second row
- add_field(0.3, "te_spreadx", "X spread", t[3])
+ add_field(0.3, "te_spreadx", fgettext("X spread"), t[3])
if dimension == 3 then
- add_field(3.6, "te_spready", "Y spread", t[4])
+ add_field(3.6, "te_spready", fgettext("Y spread"), t[4])
else
- fields[#fields + 1] = "label[4," .. height - 0.2 .. ";2D Noise]"
+ fields[#fields + 1] = "label[4," .. height - 0.2 .. ";" ..
+ fgettext("2D Noise") .. "]"
end
- add_field(6.9, "te_spreadz", "Z spread", t[5])
+ add_field(6.9, "te_spreadz", fgettext("Z spread"), t[5])
height = height + 1.1
-- Third row
- add_field(0.3, "te_octaves", "Octaves", t[7])
- add_field(3.6, "te_persist", "Persistance", t[8])
- add_field(6.9, "te_lacun", "Lacunarity", t[9])
+ add_field(0.3, "te_octaves", fgettext("Octaves"), t[7])
+ add_field(3.6, "te_persist", fgettext("Persistance"), t[8])
+ add_field(6.9, "te_lacun", fgettext("Lacunarity"), t[9])
height = height + 1.1
end
-- Flags
formspec = table.concat(fields)
- .. "checkbox[0.5," .. height - 0.6 .. ";cb_defaults;defaults;" -- defaults
+ .. "checkbox[0.5," .. height - 0.6 .. ";cb_defaults;"
+ .. fgettext("defaults") .. ";" -- defaults
.. tostring(flags["defaults"] == true) .. "]" -- to get false if nil
- .. "checkbox[5," .. height - 0.6 .. ";cb_eased;eased;" -- eased
+ .. "checkbox[5," .. height - 0.6 .. ";cb_eased;"
+ .. fgettext("eased") .. ";" -- eased
.. tostring(flags["eased"] == true) .. "]"
- .. "checkbox[5," .. height - 0.15 .. ";cb_absvalue;absvalue;" -- absvalue
+ .. "checkbox[5," .. height - 0.15 .. ";cb_absvalue;"
+ .. fgettext("absvalue") .. ";" -- absvalue
.. tostring(flags["absvalue"] == true) .. "]"
height = height + 1
height = height + 0.3
formspec = formspec
- .. "field[0.3," .. height .. ";3.3,1;te_x;X;" -- X
+ .. "field[0.3," .. height .. ";3.3,1;te_x;"
+ .. fgettext("X") .. ";" -- X
.. core.formspec_escape(v3f[1] or "") .. "]"
- .. "field[3.6," .. height .. ";3.3,1;te_y;Y;" -- Y
+ .. "field[3.6," .. height .. ";3.3,1;te_y;"
+ .. fgettext("Y") .. ";" -- Y
.. core.formspec_escape(v3f[2] or "") .. "]"
- .. "field[6.9," .. height .. ";3.3,1;te_z;Z;" -- Z
+ .. "field[6.9," .. height .. ";3.3,1;te_z;"
+ .. fgettext("Z") .. ";" -- Z
.. core.formspec_escape(v3f[3] or "") .. "]"
height = height + 1.1
elseif setting.type == "flags" then
- local enabled_flags = flags_to_table(get_current_value(setting))
+ local current_flags = flags_to_table(get_current_value(setting))
local flags = {}
- for _, name in ipairs(enabled_flags) do
+ for _, name in ipairs(current_flags) do
-- Index by name, to avoid iterating over all enabled_flags for every possible flag.
- flags[name] = true
+ if name:sub(1, 2) == "no" then
+ flags[name:sub(3)] = false
+ else
+ flags[name] = true
+ end
end
- local flags_count = #setting.possible
- local max_height = flags_count / 4
+ local flags_count = #setting.possible / 2
+ local max_height = math.ceil(flags_count / 2) / 2
-- More space for flags
description_height = description_height - 1
height = height - 1
local fields = {} -- To build formspec
- for i, name in ipairs(setting.possible) do
- local x = 0.5
- local y = height + i / 2 - 0.75
- if i - 1 >= flags_count / 2 then -- 2nd column
- x = 5
- y = y - max_height
+ local j = 1
+ for _, name in ipairs(setting.possible) do
+ if name:sub(1, 2) ~= "no" then
+ local x = 0.5
+ local y = height + j / 2 - 0.75
+ if j - 1 >= flags_count / 2 then -- 2nd column
+ x = 5
+ y = y - max_height
+ end
+ j = j + 1;
+ local checkbox_name = "cb_" .. name
+ local is_enabled = flags[name] == true -- to get false if nil
+ checkboxes[checkbox_name] = is_enabled
+
+ fields[#fields + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format(
+ x, y, checkbox_name, name, tostring(is_enabled)
+ )
end
- local checkbox_name = "cb_" .. name
- local is_enabled = flags[name] == true -- to get false if nil
- checkboxes[checkbox_name] = is_enabled
-
- fields[#fields + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format(
- x, y, checkbox_name, name, tostring(is_enabled)
- )
end
formspec = table.concat(fields)
height = height + max_height + 0.25
" (" .. setting.name .. ")"
end
- local comment_text = ""
+ local comment_text
if setting.comment == "" then
comment_text = fgettext_ne("(No description of setting given)")
else
elseif setting.type == "flags" then
local values = {}
for _, name in ipairs(setting.possible) do
- if checkboxes["cb_" .. name] then
- table.insert(values, name)
+ if name:sub(1, 2) ~= "no" then
+ if checkboxes["cb_" .. name] then
+ table.insert(values, name)
+ else
+ table.insert(values, "no" .. name)
+ end
end
end
return false
end
-local function create_settings_formspec(tabview, name, tabdata)
+local function create_settings_formspec(tabview, _, tabdata)
local formspec = "size[12,5.4;true]" ..
"tablecolumns[color;tree;text,width=28;text]" ..
"tableoptions[background=#00000000;border=false]" ..
formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. ","
.. value .. ","
- elseif entry.type == "key" then
+ elseif entry.type == "key" then --luacheck: ignore
-- ignore key settings, since we have a special dialog for them
elseif entry.type == "noise_params_2d" or entry.type == "noise_params_3d" then
if fields["btn_edit"] or list_enter then
local setting = settings[selected_setting]
if setting and setting.type ~= "category" then
- local edit_dialog = dialog_create("change_setting", create_change_setting_formspec,
- handle_change_setting_buttons)
+ local edit_dialog = dialog_create("change_setting",
+ create_change_setting_formspec, handle_change_setting_buttons)
edit_dialog:set_parent(this)
this:hide()
edit_dialog:show()
return dlg
end
--- Uncomment to generate minetest.conf.example and settings_translation_file.cpp
--- For RUN_IN_PLACE the generated files may appear in the bin folder
+-- Uncomment to generate 'minetest.conf.example' and 'settings_translation_file.cpp'.
+-- For RUN_IN_PLACE the generated files may appear in the 'bin' folder.
+-- See comment and alternative line at the end of 'generate_from_settingtypes.lua'.
---assert(loadfile(core.get_builtin_path().."mainmenu"..DIR_DELIM.."generate_from_settingtypes.lua"))(parse_config_file(true, false))
+--assert(loadfile(core.get_builtin_path().."mainmenu"..DIR_DELIM..
+-- "generate_from_settingtypes.lua"))(parse_config_file(true, false))