From 92d4a738435c4b8d5944375c596befcc15b3f47c Mon Sep 17 00:00:00 2001 From: Rui914 Date: Thu, 31 Mar 2016 17:26:39 +0900 Subject: [PATCH] Mainmenu: Refactor tab UI code - Use local variables for tabs in place of globals - Merge together if statements where possible - Replace manual table searching code with indexof where possible --- builtin/init.lua | 22 +++--- builtin/mainmenu/init.lua | 100 ++++++++++++-------------- builtin/mainmenu/init_simple.lua | 2 +- builtin/mainmenu/tab_credits.lua | 2 +- builtin/mainmenu/tab_mods.lua | 2 +- builtin/mainmenu/tab_multiplayer.lua | 4 +- builtin/mainmenu/tab_server.lua | 4 +- builtin/mainmenu/tab_settings.lua | 2 +- builtin/mainmenu/tab_simple_main.lua | 4 +- builtin/mainmenu/tab_singleplayer.lua | 4 +- builtin/mainmenu/tab_texturepacks.lua | 4 +- 11 files changed, 70 insertions(+), 80 deletions(-) diff --git a/builtin/init.lua b/builtin/init.lua index 6b27cf76e..4400a19d6 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -12,7 +12,7 @@ if core.print then -- Override native print and use -- terminal if that's turned on function print(...) - local n, t = select("#", ...), { ... } + local n, t = select("#", ...), {...} for i = 1, n do t[i] = tostring(t[i]) end @@ -25,26 +25,26 @@ os.setlocale("C", "numeric") minetest = core -- Load other files -local scriptdir = core.get_builtin_path()..DIR_DELIM -local gamepath = scriptdir.."game"..DIR_DELIM -local commonpath = scriptdir.."common"..DIR_DELIM -local asyncpath = scriptdir.."async"..DIR_DELIM +local scriptdir = core.get_builtin_path() .. DIR_DELIM +local gamepath = scriptdir .. "game" .. DIR_DELIM +local commonpath = scriptdir .. "common" .. DIR_DELIM +local asyncpath = scriptdir .. "async" .. DIR_DELIM -dofile(commonpath.."strict.lua") -dofile(commonpath.."serialize.lua") -dofile(commonpath.."misc_helpers.lua") +dofile(commonpath .. "strict.lua") +dofile(commonpath .. "serialize.lua") +dofile(commonpath .. "misc_helpers.lua") if INIT == "game" then - dofile(gamepath.."init.lua") + dofile(gamepath .. "init.lua") elseif INIT == "mainmenu" then local mainmenuscript = core.setting_get("main_menu_script") if mainmenuscript ~= nil and mainmenuscript ~= "" then dofile(mainmenuscript) else - dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua") + dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua") end elseif INIT == "async" then - dofile(asyncpath.."init.lua") + dofile(asyncpath .. "init.lua") else error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT))) end diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 69536630d..6dd345ff4 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -37,23 +37,29 @@ dofile(menupath .. DIR_DELIM .. "common.lua") dofile(menupath .. DIR_DELIM .. "gamemgr.lua") dofile(menupath .. DIR_DELIM .. "modmgr.lua") dofile(menupath .. DIR_DELIM .. "store.lua") +dofile(menupath .. DIR_DELIM .. "textures.lua") + dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua") -dofile(menupath .. DIR_DELIM .. "tab_credits.lua") -dofile(menupath .. DIR_DELIM .. "tab_mods.lua") -dofile(menupath .. DIR_DELIM .. "tab_settings.lua") dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua") if PLATFORM ~= "Android" then dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua") dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua") dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua") dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua") - dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua") - dofile(menupath .. DIR_DELIM .. "tab_server.lua") - dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua") - dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua") - dofile(menupath .. DIR_DELIM .. "textures.lua") +end + +local tabs = {} + +tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua") +tabs.mods = dofile(menupath .. DIR_DELIM .. "tab_mods.lua") +tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua") +if PLATFORM == "Android" then + tabs.simple_main = dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua") else - dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua") + tabs.singleplayer = dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua") + tabs.multiplayer = dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua") + tabs.server = dofile(menupath .. DIR_DELIM .. "tab_server.lua") + tabs.texturepacks = dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua") end -------------------------------------------------------------------------------- @@ -69,8 +75,19 @@ local function init_globals() -- Init gamedata gamedata.worldindex = 0 + if PLATFORM == "Android" then + local world_list = core.get_worlds() + local world_index = table.indexof(world_list, "singleplayerworld") - if PLATFORM ~= "Android" then + if world_index == -1 then + core.create_world("singleplayerworld", 1) + + world_list = core.get_worlds() + world_index = table.indexof(world_list, "singleplayerworld") + end + + gamedata.worldindex = world_index + else menudata.worldlist = filterlist.create( core.get_worlds, compare_worlds, @@ -89,61 +106,34 @@ local function init_globals() if not core.setting_get("menu_last_game") then local default_game = core.setting_get("default_game") or "minetest" - core.setting_set("menu_last_game", default_game ) + core.setting_set("menu_last_game", default_game) end mm_texture.init() - else - local world_list = core.get_worlds() - - local found_singleplayerworld = false - - for i,world in pairs(world_list) do - if world.name == "singleplayerworld" then - found_singleplayerworld = true - gamedata.worldindex = i - break - end - end - - if not found_singleplayerworld then - core.create_world("singleplayerworld", 1) - - local world_list = core.get_worlds() - - for i,world in pairs(world_list) do - if world.name == "singleplayerworld" then - gamedata.worldindex = i - break - end - end - end end -- Create main tabview - local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0}) - if PLATFORM ~= "Android" then - tv_main:set_autosave_tab(true) - end - if PLATFORM ~= "Android" then - tv_main:add(tab_singleplayer) - tv_main:add(tab_multiplayer) - tv_main:add(tab_server) + local tv_main = tabview_create("maintab", {x = 12, y = 5.2}, {x = 0, y = 0}) + + if PLATFORM == "Android" then + tv_main:add(tabs.simple_main) + tv_main:add(tabs.settings) else - tv_main:add(tab_simple_main) + tv_main:set_autosave_tab(true) + tv_main:add(tabs.singleplayer) + tv_main:add(tabs.multiplayer) + tv_main:add(tabs.server) + tv_main:add(tabs.settings) + tv_main:add(tabs.texturepacks) end - tv_main:add(tab_settings) - if PLATFORM ~= "Android" then - tv_main:add(tab_texturepacks) - end - tv_main:add(tab_mods) - tv_main:add(tab_credits) + + tv_main:add(tabs.mods) + tv_main:add(tabs.credits) tv_main:set_global_event_handler(main_event_handler) - tv_main:set_fixed_size(false) - if not (PLATFORM == "Android") then + if PLATFORM ~= "Android" then tv_main:set_tab(core.setting_get("maintab_LAST")) end ui.set_default("maintab") @@ -151,9 +141,9 @@ local function init_globals() -- Create modstore ui if PLATFORM == "Android" then - modstore.init({x=12, y=6}, 3, 2) + modstore.init({x = 12, y = 6}, 3, 2) else - modstore.init({x=12, y=8}, 4, 3) + modstore.init({x = 12, y = 8}, 4, 3) end ui.update() diff --git a/builtin/mainmenu/init_simple.lua b/builtin/mainmenu/init_simple.lua index c3891d21c..298bd834e 100644 --- a/builtin/mainmenu/init_simple.lua +++ b/builtin/mainmenu/init_simple.lua @@ -1,4 +1,4 @@ -- helper file to be able to debug the simple menu on PC -- without messing around with actual menu code! -PLATFORM="Android" +PLATFORM = "Android" dofile("builtin/mainmenu/init.lua") diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 5cb730b38..822f64844 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -69,7 +69,7 @@ local previous_contributors = { "Zefram ", } -tab_credits = { +return { name = "credits", caption = fgettext("Credits"), cbf_formspec = function(tabview, name, tabdata) diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua index af758f8df..69027c015 100644 --- a/builtin/mainmenu/tab_mods.lua +++ b/builtin/mainmenu/tab_mods.lua @@ -163,7 +163,7 @@ local function handle_buttons(tabview, fields, tabname, tabdata) end -------------------------------------------------------------------------------- -tab_mods = { +return { name = "mods", caption = fgettext("Mods"), cbf_formspec = get_formspec, diff --git a/builtin/mainmenu/tab_multiplayer.lua b/builtin/mainmenu/tab_multiplayer.lua index 2072f8c38..06d8791f0 100644 --- a/builtin/mainmenu/tab_multiplayer.lua +++ b/builtin/mainmenu/tab_multiplayer.lua @@ -256,10 +256,10 @@ local function on_change(type,old_tab,new_tab) end -------------------------------------------------------------------------------- -tab_multiplayer = { +return { name = "multiplayer", caption = fgettext("Client"), cbf_formspec = get_formspec, cbf_button_handler = main_button_handler, on_change = on_change - } +} diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index d08eecc21..6b96825a0 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -186,10 +186,10 @@ local function main_button_handler(this, fields, name, tabdata) end -------------------------------------------------------------------------------- -tab_server = { +return { name = "server", caption = fgettext("Server"), cbf_formspec = get_formspec, cbf_button_handler = main_button_handler, on_change = nil - } +} diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 6285968eb..2649a8a57 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -384,7 +384,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) return ddhandled end -tab_settings = { +return { name = "settings", caption = fgettext("Settings"), cbf_formspec = formspec, diff --git a/builtin/mainmenu/tab_simple_main.lua b/builtin/mainmenu/tab_simple_main.lua index 434113b5f..b32418938 100644 --- a/builtin/mainmenu/tab_simple_main.lua +++ b/builtin/mainmenu/tab_simple_main.lua @@ -196,10 +196,10 @@ local function on_activate(type,old_tab,new_tab) end -------------------------------------------------------------------------------- -tab_simple_main = { +return { name = "main", caption = fgettext("Main"), cbf_formspec = get_formspec, cbf_button_handler = main_button_handler, on_change = on_activate - } +} diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index a40918af9..05060cbc6 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -241,10 +241,10 @@ local function on_change(type, old_tab, new_tab) end -------------------------------------------------------------------------------- -tab_singleplayer = { +return { name = "singleplayer", caption = fgettext("Singleplayer"), cbf_formspec = get_formspec, cbf_button_handler = main_button_handler, on_change = on_change - } +} diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index 2b0c77afc..a102fd61d 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -123,10 +123,10 @@ local function main_button_handler(tabview, fields, name, tabdata) end -------------------------------------------------------------------------------- -tab_texturepacks = { +return { name = "texturepacks", caption = fgettext("Texturepacks"), cbf_formspec = get_formspec, cbf_button_handler = main_button_handler, on_change = nil - } +}