summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2013-07-03 01:25:26 -0400
committerkwolekr <kwolekr@minetest.net>2013-07-03 01:25:26 -0400
commita225efaec549f9b2b6d6a876b81279868abb18ba (patch)
tree690e2c7f56ce4c73ced3cf3c62fe98c825243ecc
parentad4c0653449f2d464608dbb75b2798273fd4fe08 (diff)
downloadminetest-a225efaec549f9b2b6d6a876b81279868abb18ba.tar.gz
minetest-a225efaec549f9b2b6d6a876b81279868abb18ba.tar.bz2
minetest-a225efaec549f9b2b6d6a876b81279868abb18ba.zip
Lua main menu: Fix crash on init lua error, mapgen dropdown index, and new worlds not saving index
-rw-r--r--builtin/mainmenu.lua32
-rw-r--r--src/guiEngine.cpp7
2 files changed, 27 insertions, 12 deletions
diff --git a/builtin/mainmenu.lua b/builtin/mainmenu.lua
index ef0ba7226..56143e700 100644
--- a/builtin/mainmenu.lua
+++ b/builtin/mainmenu.lua
@@ -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
diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp
index f04f15820..2c5000d8b 100644
--- a/src/guiEngine.cpp
+++ b/src/guiEngine.cpp
@@ -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();
}
/******************************************************************************/