Lua main menu: Fix crash on init lua error, mapgen dropdown index, and new worlds...
authorkwolekr <kwolekr@minetest.net>
Wed, 3 Jul 2013 05:25:26 +0000 (01:25 -0400)
committerkwolekr <kwolekr@minetest.net>
Wed, 3 Jul 2013 05:25:26 +0000 (01:25 -0400)
builtin/mainmenu.lua
src/guiEngine.cpp

index ef0ba722646cbe48192522bdea20b6a95975c835..56143e700b518b4b9caf54d9d4388a8433af2677 100644 (file)
@@ -437,6 +437,22 @@ end
 
 --------------------------------------------------------------------------------
 function tabbuilder.dialog_create_world()
+       local mapgens = {"v6", "v7", "indev", "singlenode", "math"}
+
+       local current_mg = engine.setting_get("mg_name")
+
+       local mglist = ""
+       local selindex = 1
+       local i = 1
+       for k,v in pairs(mapgens) do
+               if current_mg == v then
+                       selindex = i
+               end
+               i = i + 1
+               mglist = mglist .. v .. ","
+       end
+       mglist = mglist:sub(1, -2)
+
        local retval = 
                "label[2,0;World name]"..
                "label[2,1;Mapgen]"..
@@ -444,7 +460,7 @@ function tabbuilder.dialog_create_world()
                "label[2,2;Game]"..
                "button[5,4.5;2.6,0.5;world_create_confirm;Create]" ..
                "button[7.5,4.5;2.8,0.5;world_create_cancel;Cancel]" ..
-               "dropdown[4.2,1;6.3;dd_mapgen;v6,v7,indev,singlenode,math;1]" .. --TODO read from minetest
+               "dropdown[4.2,1;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" ..
                "textlist[4.2,1.9;5.8,2.3;games;" ..
                gamemgr.gamelist() ..
                ";" .. menu.last_game .. ";true]"
@@ -534,16 +550,12 @@ function tabbuilder.handle_create_world_buttons(fields)
                                for i=1,#worldlist,1 do
                                        if worldlist[i].name == worldname then
                                                index = i
-                                               print("found new world index: " .. index)
                                                break
                                        end
                                end
-                               
-                               if tabbuilder.current_tab == "singleplayer" then
-                                       engine.setting_set("main_menu_singleplayer_world_idx",index)
-                               else
-                                       menu.last_world = index
-                               end
+
+                               engine.setting_set("main_menu_singleplayer_world_idx", index)
+                               menu.last_world = index
                        end
                else
                        gamedata.errormessage = "No worldname given or no game selected"
@@ -805,7 +817,7 @@ function tabbuilder.handle_singleplayer_buttons(fields)
                if selected > 0 then
                        gamedata.selected_world = menu.filtered_index_to_plain(selected)
                        gamedata.singleplayer   = true
-                       
+
                        engine.setting_set("main_menu_tab",tabbuilder.current_tab)
                        engine.setting_set("main_menu_singleplayer_world_idx",selected)
                        
@@ -1023,7 +1035,7 @@ end
 --------------------------------------------------------------------------------
 function tabbuilder.tab_singleplayer()
        local index = engine.setting_get("main_menu_singleplayer_world_idx")
-       
+
        if index == nil then
                index = 0
        end
index f04f158206888b6779125d456aea3e287ab26f64..2c5000d8bbae40eca90004fc09368ba19b674da3 100644 (file)
@@ -299,6 +299,8 @@ GUIEngine::~GUIEngine()
 {
        video::IVideoDriver* driver = m_device->getVideoDriver();
        assert(driver != 0);
+       
+       //TODO: clean up m_menu here
 
        lua_close(m_engineluastack);
 
@@ -309,8 +311,9 @@ GUIEngine::~GUIEngine()
                if (m_textures[i] != 0)
                        driver->removeTexture(m_textures[i]);
        }
-
-       m_cloud.clouds->drop();
+       
+       if (m_cloud.clouds)
+               m_cloud.clouds->drop();
 }
 
 /******************************************************************************/