SAPI: Throw runtime error instead of if l_get_mapgen_object called in incorrect thread
[oweals/minetest.git] / builtin / mainmenu / init.lua
index ab2b8d80cc073ca840cfd45b3bb9dea946c92926..176796befcce07eebd0345638fecf0a0eaa42524 100644 (file)
@@ -38,21 +38,25 @@ dofile(menupath .. DIR_DELIM .. "gamemgr.lua")
 dofile(menupath .. DIR_DELIM .. "modmgr.lua")
 dofile(menupath .. DIR_DELIM .. "store.lua")
 dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
-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_credits.lua")
 dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
-dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
-dofile(menupath .. DIR_DELIM .. "tab_server.lua")
 dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
-dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
-dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
-dofile(menupath .. DIR_DELIM .. "textures.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")
+else
+       dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
+end
 
 --------------------------------------------------------------------------------
-local function main_event_handler(tabview,event)
+local function main_event_handler(tabview, event)
        if event == "MenuQuit" then
                core.close()
        end
@@ -61,54 +65,100 @@ end
 
 --------------------------------------------------------------------------------
 local function init_globals()
-       --init gamedata
+       -- Init gamedata
        gamedata.worldindex = 0
 
-       menudata.worldlist = filterlist.create(
-                                       core.get_worlds,
-                                       compare_worlds,
-                                       function(element,uid)
-                                               if element.name == uid then
-                                                       return true
-                                               end
-                                               return false
-                                       end, --unique id compare fct
-                                       function(element,gameid)
-                                               if element.gameid == gameid then
-                                                       return true
-                                               end
-                                               return false
-                                       end --filter fct
-                                       )
-
-       menudata.worldlist:add_sort_mechanism("alphabetic",sort_worlds_alphabetic)
-       menudata.worldlist:set_sortmode("alphabetic")
-       
-       mm_texture.init()
-       
-       --create main tabview
-       local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=-0.3,y=-0.99})
-       tv_main:set_autosave_tab(true)
-       tv_main:add(tab_singleplayer)
-       tv_main:add(tab_multiplayer)
-       tv_main:add(tab_server)
+
+       if PLATFORM ~= "Android" then
+               menudata.worldlist = filterlist.create(
+                       core.get_worlds,
+                       compare_worlds,
+                       -- Unique id comparison function
+                       function(element, uid)
+                               return element.name == uid
+                       end,
+                       -- Filter function
+                       function(element, gameid)
+                               return element.gameid == gameid
+                       end
+               )
+
+               menudata.worldlist:add_sort_mechanism("alphabetic", sort_worlds_alphabetic)
+               menudata.worldlist:set_sortmode("alphabetic")
+
+               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 )
+               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)
+       else
+               tv_main:add(tab_simple_main)
+       end
        tv_main:add(tab_settings)
-       tv_main:add(tab_texturepacks)
+       if PLATFORM ~= "Android" then
+               tv_main:add(tab_texturepacks)
+       end
        tv_main:add(tab_mods)
        tv_main:add(tab_credits)
-       
+
        tv_main:set_global_event_handler(main_event_handler)
-       
-       tv_main:set_tab(core.setting_get("maintab_LAST"))
+
+       tv_main:set_fixed_size(false)
+
+       if not (PLATFORM == "Android") then
+               tv_main:set_tab(core.setting_get("maintab_LAST"))
+       end
        ui.set_default("maintab")
        tv_main:show()
 
-       --create modstore ui
-       modstore.init({x=12,y=8},4,3)
+       -- Create modstore ui
+       if PLATFORM == "Android" then
+               modstore.init({x=12, y=6}, 3, 2)
+       else
+               modstore.init({x=12, y=8}, 4, 3)
+       end
 
        ui.update()
-       
+
        core.sound_play("main_menu", true)
 end
 
 init_globals()
+