Skip to content
Snippets Groups Projects
mainmenu.lua 41.1 KiB
Newer Older
RealBadAngel's avatar
RealBadAngel committed
					.. dump(engine.setting_getbool("liquid_finite")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[4.5,0;cb_mipmapping;".. fgettext("Mip-Mapping") .. ";"
sapier's avatar
sapier committed
					.. dump(engine.setting_getbool("mip_map")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[4.5,0.5;cb_anisotrophic;".. fgettext("Anisotropic Filtering") .. ";"
sapier's avatar
sapier committed
					.. dump(engine.setting_getbool("anisotropic_filter")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[4.5,1.0;cb_bilinear;".. fgettext("Bi-Linear Filtering") .. ";"
sapier's avatar
sapier committed
					.. dump(engine.setting_getbool("bilinear_filter")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[4.5,1.5;cb_trilinear;".. fgettext("Tri-Linear Filtering") .. ";"
sapier's avatar
sapier committed
					.. dump(engine.setting_getbool("trilinear_filter")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";"
sapier's avatar
sapier committed
					.. dump(engine.setting_getbool("enable_shaders")) .. "]"..
RealBadAngel's avatar
RealBadAngel committed
			"button[1,4.5;2.25,0.5;btn_change_keys;".. fgettext("Change keys") .. "]"

	if engine.setting_getbool("enable_shaders") then
		tab_string = tab_string ..
RealBadAngel's avatar
RealBadAngel committed
			"checkbox[8,0.5;cb_bumpmapping;".. fgettext("Bumpmapping") .. ";"
					.. dump(engine.setting_getbool("enable_bumpmapping")) .. "]"..
			"checkbox[8,1.0;cb_parallax;".. fgettext("Parallax Occlusion") .. ";"
					.. dump(engine.setting_getbool("enable_parallax_occlusion")) .. "]"..
			"checkbox[8,1.5;cb_generate_normalmaps;".. fgettext("Generate Normalmaps") .. ";"
					.. dump(engine.setting_getbool("generate_normalmaps")) .. "]"..
			"checkbox[8,2.0;cb_waving_water;".. fgettext("Waving Water") .. ";"
RealBadAngel's avatar
RealBadAngel committed
					.. dump(engine.setting_getbool("enable_waving_water")) .. "]"..
			"checkbox[8,2.5;cb_waving_leaves;".. fgettext("Waving Leaves") .. ";"
RealBadAngel's avatar
RealBadAngel committed
					.. dump(engine.setting_getbool("enable_waving_leaves")) .. "]"..
			"checkbox[8,3.0;cb_waving_plants;".. fgettext("Waving Plants") .. ";"
RealBadAngel's avatar
RealBadAngel committed
					.. dump(engine.setting_getbool("enable_waving_plants")) .. "]"
	else
		tab_string = tab_string ..
RealBadAngel's avatar
RealBadAngel committed
			"textlist[8.33,0.7;4,1;;#888888" .. fgettext("Bumpmapping") .. ";0;true]" ..
			"textlist[8.33,1.2;4,1;;#888888" .. fgettext("Parallax Occlusion") .. ";0;true]" ..
			"textlist[8.33,1.7;4,1;;#888888" .. fgettext("Generate Normalmaps") .. ";0;true]" ..
			"textlist[8.33,2.2;4,1;;#888888" .. fgettext("Waving Water") .. ";0;true]" ..
			"textlist[8.33,2.7;4,1;;#888888" .. fgettext("Waving Leaves") .. ";0;true]" ..
			"textlist[8.33,3.2;4,1;;#888888" .. fgettext("Waving Plants") .. ";0;true]"
RealBadAngel's avatar
RealBadAngel committed
	end
	return tab_string
end

--------------------------------------------------------------------------------
function tabbuilder.tab_singleplayer()
	local index = filterlist.get_current_index(worldlist,
sapier's avatar
sapier committed
				tonumber(engine.setting_get("mainmenu_last_selected_world"))
				)
sapier's avatar
sapier committed
	return	"button[4,4.15;2.6,0.5;world_delete;".. fgettext("Delete") .. "]" ..
			"button[6.5,4.15;2.8,0.5;world_create;".. fgettext("New") .. "]" ..
			"button[9.2,4.15;2.55,0.5;world_configure;".. fgettext("Configure") .. "]" ..
			"button[8.5,4.95;3.25,0.5;play;".. fgettext("Play") .. "]" ..
			"label[4,-0.25;".. fgettext("Select World:") .. "]"..
			"vertlabel[0,-0.25;".. fgettext("SINGLE PLAYER") .. "]" ..
			"checkbox[0.5,0.25;cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
			dump(engine.setting_getbool("creative_mode")) .. "]"..
sapier's avatar
sapier committed
			"checkbox[0.5,0.7;cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
			dump(engine.setting_getbool("enable_damage")) .. "]"..
			"textlist[4,0.25;7.5,3.7;sp_worlds;" ..
sapier's avatar
sapier committed
			menu.render_world_list() ..
			";" .. index .. "]" ..
			menubar.formspec
end

--------------------------------------------------------------------------------
sapier's avatar
sapier committed
function tabbuilder.tab_texture_packs()
	local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]"..
			"vertlabel[0,-0.25;".. fgettext("TEXTURE PACKS") .. "]" ..
			"textlist[4,0.25;7.5,5.0;TPs;"

	local current_texture_path = engine.setting_get("texture_path")
	local list = filter_texture_pack_list(engine.get_dirlist(engine.get_texturepath(), true))
	local index = tonumber(engine.setting_get("mainmenu_last_selected_TP"))
	if index == nil then index = 1 end
sapier's avatar
sapier committed
	if current_texture_path == "" then
		retval = retval ..
			menu.render_texture_pack_list(list) ..
PilzAdam's avatar
PilzAdam committed
			";" .. index .. "]"
sapier's avatar
sapier committed
		return retval
sapier's avatar
sapier committed
	local infofile = current_texture_path ..DIR_DELIM.."info.txt"
	local infotext = ""
	local f = io.open(infofile, "r")
sapier's avatar
sapier committed
		infotext = fgettext("No information available")
sapier's avatar
sapier committed
		infotext = f:read("*all")
sapier's avatar
sapier committed
	local screenfile = current_texture_path..DIR_DELIM.."screenshot.png"
	local no_screenshot = nil
	if not file_exists(screenfile) then
		screenfile = nil
		no_screenshot = menu.defaulttexturedir .. "no_screenshot.png"
sapier's avatar
sapier committed
	end
sapier's avatar
sapier committed
	return	retval ..
			menu.render_texture_pack_list(list) ..
			";" .. index .. "]" ..
			"image[0.65,0.25;4.0,3.7;"..engine.formspec_escape(screenfile or no_screenshot).."]"..
sapier's avatar
sapier committed
			"textarea[1.0,3.25;3.7,1.5;;"..engine.formspec_escape(infotext or "")..";]"
--------------------------------------------------------------------------------
function tabbuilder.tab_credits()
	local logofile = menu.defaulttexturedir .. "logo.png"
	return	"vertlabel[0,-0.5;CREDITS]" ..
			"label[0.5,3;Minetest " .. engine.get_version() .. "]" ..
			"label[0.5,3.3;http://minetest.net]" ..
			"image[0.5,1;" .. engine.formspec_escape(logofile) .. "]" ..
			"textlist[3.5,-0.25;8.5,5.8;list_credits;" ..
sapier's avatar
sapier committed
			"#FFFF00" .. fgettext("Core Developers") .."," ..
			"Perttu Ahola (celeron55) <celeron55@gmail.com>,"..
			"Ryan Kwolek (kwolekr) <kwolekr@minetest.net>,"..
			"PilzAdam <pilzadam@minetest.net>," ..
Ilya Zhuravlev's avatar
Ilya Zhuravlev committed
			"Ilya Zhuravlev (xyz) <xyz@minetest.net>,"..
			"Lisa Milne (darkrose) <lisa@ltmnet.com>,"..
			"Maciej Kasatkin (RealBadAngel) <mk@realbadangel.pl>,"..
			"proller <proler@gmail.com>,"..
			"sfan5 <sfan5@live.de>,"..
			"kahrl <kahrl@gmx.net>,"..
			"ShadowNinja <shadowninja@minetest.net>,"..
			"Nathanael Courant (Nore/Novatux) <nore@mesecons.net>,"..
PilzAdam's avatar
PilzAdam committed
			"BlockMen,"..
sapier's avatar
sapier committed
			"#FFFF00" .. fgettext("Active Contributors") .. "," ..
			"Vanessa Ezekowitz (VanessaE) <vanessaezekowitz@gmail.com>,"..
			"Jurgen Doser (doserj) <jurgen.doser@gmail.com>,"..
			"Jeija <jeija@mesecons.net>,"..
			"MirceaKitsune <mirceakitsune@gmail.com>,"..
			"dannydark <the_skeleton_of_a_child@yahoo.co.uk>,"..
			"0gb.us <0gb.us@0gb.us>,"..
			"," ..
sapier's avatar
sapier committed
			"#FFFF00" .. fgettext("Previous Contributors") .. "," ..
			"Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com>,"..
			"Jonathan Neuschafer <j.neuschaefer@gmx.net>,"..
			"Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net>,"..
			"Constantin Wenger (SpeedProg) <constantin.wenger@googlemail.com>,"..
			"matttpt <matttpt@gmail.com>,"..
			"JacobF <queatz@gmail.com>,"..
			";0;true]"
end

--------------------------------------------------------------------------------
function tabbuilder.init()
	tabbuilder.tabfuncs = {
		singleplayer  = tabbuilder.tab_singleplayer,
		multiplayer   = tabbuilder.tab_multiplayer,
		server        = tabbuilder.tab_server,
		settings      = tabbuilder.tab_settings,
		texture_packs = tabbuilder.tab_texture_packs,
		credits       = tabbuilder.tab_credits,
		dialog_create_world = tabbuilder.dialog_create_world,
		dialog_delete_world = tabbuilder.dialog_delete_world
	}

	tabbuilder.tabsizes = {
		dialog_create_world = {width=12, height=7},
		dialog_delete_world = {width=12, height=5.2}
	}

	tabbuilder.current_tab = engine.setting_get("main_menu_tab")
	if tabbuilder.current_tab == nil or
		tabbuilder.current_tab == "" then
		tabbuilder.current_tab = "singleplayer"
		engine.setting_set("main_menu_tab",tabbuilder.current_tab)
	end
	--initialize tab buttons
	tabbuilder.last_tab = nil
	tabbuilder.show_buttons = true
	tabbuilder.current_buttons = {}
	table.insert(tabbuilder.current_buttons,{name="singleplayer", caption=fgettext("Singleplayer")})
	table.insert(tabbuilder.current_buttons,{name="multiplayer", caption=fgettext("Client")})
	table.insert(tabbuilder.current_buttons,{name="server", caption=fgettext("Server")})
	table.insert(tabbuilder.current_buttons,{name="settings", caption=fgettext("Settings")})
	table.insert(tabbuilder.current_buttons,{name="texture_packs", caption=fgettext("Texture Packs")})
	if engine.setting_getbool("main_menu_game_mgr") then
		table.insert(tabbuilder.current_buttons,{name="game_mgr", caption=fgettext("Games")})
	end
	if engine.setting_getbool("main_menu_mod_mgr") then
		table.insert(tabbuilder.current_buttons,{name="mod_mgr", caption=fgettext("Mods")})
	end
	table.insert(tabbuilder.current_buttons,{name="credits", caption=fgettext("Credits")})
	for i=1,#tabbuilder.current_buttons,1 do
		if tabbuilder.current_buttons[i].name == tabbuilder.current_tab then
			tabbuilder.last_tab_index = i
		end
	end
	if tabbuilder.current_tab ~= "singleplayer" then
		menu.update_gametype(true)
	else
		menu.update_gametype()
	end
end

--------------------------------------------------------------------------------
function tabbuilder.checkretval(retval)

	if retval ~= nil then
		if retval.current_tab ~= nil then
			tabbuilder.current_tab = retval.current_tab
		end
		if retval.is_dialog ~= nil then
			tabbuilder.is_dialog = retval.is_dialog
		end
		if retval.show_buttons ~= nil then
			tabbuilder.show_buttons = retval.show_buttons
		end
		if retval.skipformupdate ~= nil then
			tabbuilder.skipformupdate = retval.skipformupdate
		end

		if retval.ignore_menu_quit == true then
			tabbuilder.ignore_menu_quit = true
		else
			tabbuilder.ignore_menu_quit = false
		end
	end
end

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- initialize callbacks
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
engine.button_handler = function(fields)
	--print("Buttonhandler: tab: " .. tabbuilder.current_tab .. " fields: " .. dump(fields))
	if fields["btn_error_confirm"] then
		gamedata.errormessage = nil
	end
	local retval = modmgr.handle_buttons(tabbuilder.current_tab,fields)
	tabbuilder.checkretval(retval)
	retval = gamemgr.handle_buttons(tabbuilder.current_tab,fields)
	tabbuilder.checkretval(retval)
	retval = modstore.handle_buttons(tabbuilder.current_tab,fields)
	tabbuilder.checkretval(retval)
	if tabbuilder.current_tab == "dialog_create_world" then
		tabbuilder.handle_create_world_buttons(fields)
	end
	if tabbuilder.current_tab == "dialog_delete_world" then
		tabbuilder.handle_delete_world_buttons(fields)
	end
	if tabbuilder.current_tab == "singleplayer" then
		tabbuilder.handle_singleplayer_buttons(fields)
	end
	if tabbuilder.current_tab == "texture_packs" then
sapier's avatar
sapier committed
		tabbuilder.handle_texture_pack_buttons(fields)
	if tabbuilder.current_tab == "multiplayer" then
		tabbuilder.handle_multiplayer_buttons(fields)
	end
	if tabbuilder.current_tab == "settings" then
		tabbuilder.handle_settings_buttons(fields)
	end
	if tabbuilder.current_tab == "server" then
		tabbuilder.handle_server_buttons(fields)
	end
	--tab buttons
	tabbuilder.handle_tab_buttons(fields)
	--menubar buttons
	menubar.handle_buttons(fields)
	if not tabbuilder.skipformupdate then
		--update menu
		update_menu()
	else
		tabbuilder.skipformupdate = false
	end
end

--------------------------------------------------------------------------------
engine.event_handler = function(event)
	if event == "MenuQuit" then
		if tabbuilder.is_dialog then
			if tabbuilder.ignore_menu_quit then
				return
			end

			tabbuilder.is_dialog = false
			tabbuilder.show_buttons = true
			tabbuilder.current_tab = engine.setting_get("main_menu_tab")
			menu.update_gametype()
			update_menu()
		else
			engine.close()
		end
	end

	if event == "Refresh" then
		update_menu()
	end
--------------------------------------------------------------------------------
function menu.update_gametype(reset)
	local game = menu.lastgame()

	if reset or game == nil then
		mm_texture.reset()
		engine.set_topleft_text("")
		filterlist.set_filtercriteria(worldlist,nil)
	else
		mm_texture.update(tabbuilder.current_tab,game)
		engine.set_topleft_text(game.name)
		filterlist.set_filtercriteria(worldlist,game.id)
	end
end

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- menu startup
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
init_globals()
mm_texture.init()
menu.init()
tabbuilder.init()
menubar.refresh()
modstore.init()
sapier's avatar
sapier committed

engine.sound_play("main_menu", true)
update_menu()