mirror of
https://github.com/minetest/minetest.git
synced 2024-11-26 09:33:45 +01:00
Add texture pack selection to main menu
This commit is contained in:
parent
fe1fe1b1e4
commit
383153419b
@ -20,6 +20,17 @@ menu = {}
|
|||||||
local tabbuilder = {}
|
local tabbuilder = {}
|
||||||
local worldlist = nil
|
local worldlist = nil
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
local function filterTP(TPlist)
|
||||||
|
TPlist2 = {"None"}
|
||||||
|
for _,i in ipairs(TPlist) do
|
||||||
|
if i~="base" then
|
||||||
|
table.insert(TPlist2, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return TPlist2
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function menu.render_favorite(spec,render_details)
|
function menu.render_favorite(spec,render_details)
|
||||||
local text = ""
|
local text = ""
|
||||||
@ -162,6 +173,23 @@ function menu.render_world_list()
|
|||||||
return retval
|
return retval
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function menu.render_TP_list(TPlist)
|
||||||
|
local retval = ""
|
||||||
|
|
||||||
|
--local current_TP = filterlist.get_list(TPlist)
|
||||||
|
|
||||||
|
for i,v in ipairs(TPlist) do
|
||||||
|
if retval ~= "" then
|
||||||
|
retval = retval ..","
|
||||||
|
end
|
||||||
|
|
||||||
|
retval = retval .. v
|
||||||
|
end
|
||||||
|
|
||||||
|
return retval
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function menu.init()
|
function menu.init()
|
||||||
--init menu data
|
--init menu data
|
||||||
@ -179,8 +207,7 @@ function menu.init()
|
|||||||
menu.favorites = engine.get_favorites("local")
|
menu.favorites = engine.get_favorites("local")
|
||||||
end
|
end
|
||||||
|
|
||||||
menu.defaulttexturedir = engine.get_gamepath() .. DIR_DELIM .. ".." ..
|
menu.defaulttexturedir = engine.get_texturepath() .. DIR_DELIM .. "base" ..
|
||||||
DIR_DELIM .. "textures" .. DIR_DELIM .. "base" ..
|
|
||||||
DIR_DELIM .. "pack" .. DIR_DELIM
|
DIR_DELIM .. "pack" .. DIR_DELIM
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -307,6 +334,10 @@ function tabbuilder.gettab()
|
|||||||
retval = retval .. tabbuilder.tab_settings()
|
retval = retval .. tabbuilder.tab_settings()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if tabbuilder.current_tab == "texture_packs" then
|
||||||
|
retval = retval .. tabbuilder.tab_TP()
|
||||||
|
end
|
||||||
|
|
||||||
if tabbuilder.current_tab == "credits" then
|
if tabbuilder.current_tab == "credits" then
|
||||||
retval = retval .. tabbuilder.tab_credits()
|
retval = retval .. tabbuilder.tab_credits()
|
||||||
end
|
end
|
||||||
@ -734,6 +765,23 @@ function tabbuilder.handle_singleplayer_buttons(fields)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function tabbuilder.handle_TP_buttons(fields)
|
||||||
|
if fields["TPs"] ~= nil then
|
||||||
|
local event = explode_textlist_event(fields["TPs"])
|
||||||
|
if event.typ == "CHG" or event.typ=="DCL" then
|
||||||
|
local index = engine.get_textlist_index("TPs")
|
||||||
|
engine.setting_set("mainmenu_last_selected_TP",
|
||||||
|
index)
|
||||||
|
local TPlist = filterTP(engine.get_dirlist(engine.get_texturepath(), true))
|
||||||
|
local TPname = TPlist[engine.get_textlist_index("TPs")]
|
||||||
|
local TPpath = engine.get_texturepath()..DIR_DELIM..TPname
|
||||||
|
if TPname == "None" then TPpath = "" end
|
||||||
|
engine.setting_set("texture_path", TPpath)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function tabbuilder.tab_header()
|
function tabbuilder.tab_header()
|
||||||
|
|
||||||
@ -798,6 +846,7 @@ function tabbuilder.init()
|
|||||||
table.insert(tabbuilder.current_buttons,{name="multiplayer", caption="Client"})
|
table.insert(tabbuilder.current_buttons,{name="multiplayer", caption="Client"})
|
||||||
table.insert(tabbuilder.current_buttons,{name="server", caption="Server"})
|
table.insert(tabbuilder.current_buttons,{name="server", caption="Server"})
|
||||||
table.insert(tabbuilder.current_buttons,{name="settings", caption="Settings"})
|
table.insert(tabbuilder.current_buttons,{name="settings", caption="Settings"})
|
||||||
|
table.insert(tabbuilder.current_buttons,{name="texture_packs", caption="Texture Packs"})
|
||||||
|
|
||||||
if engine.setting_getbool("main_menu_game_mgr") then
|
if engine.setting_getbool("main_menu_game_mgr") then
|
||||||
table.insert(tabbuilder.current_buttons,{name="game_mgr", caption="Games"})
|
table.insert(tabbuilder.current_buttons,{name="game_mgr", caption="Games"})
|
||||||
@ -946,6 +995,49 @@ function tabbuilder.tab_singleplayer()
|
|||||||
menubar.formspec
|
menubar.formspec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function tabbuilder.tab_TP()
|
||||||
|
local TPpath = engine.setting_get("texture_path")
|
||||||
|
local TPlist = filterTP(engine.get_dirlist(engine.get_texturepath(), true))
|
||||||
|
local index = tonumber(engine.setting_get("mainmenu_last_selected_TP"))
|
||||||
|
if index == nil then index = 1 end
|
||||||
|
if TPpath == "" then
|
||||||
|
return "label[4,-0.25;Select texture pack:]"..
|
||||||
|
"vertlabel[0,-0.25;TEXTURE PACKS]" ..
|
||||||
|
"textlist[4,0.25;7.5,5.0;TPs;" ..
|
||||||
|
menu.render_TP_list(TPlist) ..
|
||||||
|
";" .. index .. "]" ..
|
||||||
|
menubar.formspec
|
||||||
|
end
|
||||||
|
local TPinfofile = TPpath..DIR_DELIM.."info.txt"
|
||||||
|
local f = io.open(TPinfofile, "r")
|
||||||
|
if f==nil then
|
||||||
|
menu.TPinfo = "No information available"
|
||||||
|
else
|
||||||
|
menu.TPinfo = f:read("*all")
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
local TPscreenfile = TPpath..DIR_DELIM.."screenshot.png"
|
||||||
|
local f = io.open(TPscreenfile, "r")
|
||||||
|
if f==nil then
|
||||||
|
menu.TPscreen = nil
|
||||||
|
else
|
||||||
|
menu.TPscreen = TPscreenfile
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local no_screenshot = engine.get_texturepath()..DIR_DELIM.."base"..DIR_DELIM.."pack"..DIR_DELIM.."no_screenshot.png"
|
||||||
|
|
||||||
|
return "label[4,-0.25;Select texture pack:]"..
|
||||||
|
"vertlabel[0,-0.25;TEXTURE PACKS]" ..
|
||||||
|
"textlist[4,0.25;7.5,5.0;TPs;" ..
|
||||||
|
menu.render_TP_list(TPlist) ..
|
||||||
|
";" .. index .. "]" ..
|
||||||
|
"image[0.65,0.25;4.0,3.7;"..(menu.TPscreen or no_screenshot).."]"..
|
||||||
|
"textarea[1.0,3.25;3.7,1.5;;"..(menu.TPinfo or "")..";]"..
|
||||||
|
menubar.formspec
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function tabbuilder.tab_credits()
|
function tabbuilder.tab_credits()
|
||||||
return "vertlabel[0,-0.5;CREDITS]" ..
|
return "vertlabel[0,-0.5;CREDITS]" ..
|
||||||
@ -1039,6 +1131,10 @@ engine.button_handler = function(fields)
|
|||||||
tabbuilder.handle_singleplayer_buttons(fields)
|
tabbuilder.handle_singleplayer_buttons(fields)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if tabbuilder.current_tab == "texture_packs" then
|
||||||
|
tabbuilder.handle_TP_buttons(fields)
|
||||||
|
end
|
||||||
|
|
||||||
if tabbuilder.current_tab == "multiplayer" then
|
if tabbuilder.current_tab == "multiplayer" then
|
||||||
tabbuilder.handle_multiplayer_buttons(fields)
|
tabbuilder.handle_multiplayer_buttons(fields)
|
||||||
end
|
end
|
||||||
|
@ -3482,6 +3482,7 @@ void the_game(
|
|||||||
infostream << "\t\t" << i << ":" << texture->getName().getPath().c_str()
|
infostream << "\t\t" << i << ":" << texture->getName().getPath().c_str()
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
}
|
}
|
||||||
|
clearTextureNameCache();
|
||||||
infostream << "\tRemaining materials: "
|
infostream << "\tRemaining materials: "
|
||||||
<< driver-> getMaterialRendererCount ()
|
<< driver-> getMaterialRendererCount ()
|
||||||
<< " (note: irrlicht doesn't support removing renderers)"<< std::endl;
|
<< " (note: irrlicht doesn't support removing renderers)"<< std::endl;
|
||||||
|
@ -82,6 +82,7 @@ void guiLuaApi::initialize(lua_State* L,GUIEngine* engine)
|
|||||||
retval &= API_FCT(set_topleft_text);
|
retval &= API_FCT(set_topleft_text);
|
||||||
retval &= API_FCT(get_modpath);
|
retval &= API_FCT(get_modpath);
|
||||||
retval &= API_FCT(get_gamepath);
|
retval &= API_FCT(get_gamepath);
|
||||||
|
retval &= API_FCT(get_texturepath);
|
||||||
retval &= API_FCT(get_dirlist);
|
retval &= API_FCT(get_dirlist);
|
||||||
retval &= API_FCT(create_dir);
|
retval &= API_FCT(create_dir);
|
||||||
retval &= API_FCT(delete_dir);
|
retval &= API_FCT(delete_dir);
|
||||||
@ -829,6 +830,15 @@ int guiLuaApi::l_get_gamepath(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
int guiLuaApi::l_get_texturepath(lua_State *L)
|
||||||
|
{
|
||||||
|
std::string gamepath
|
||||||
|
= fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "textures");
|
||||||
|
lua_pushstring(L, gamepath.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
int guiLuaApi::l_get_dirlist(lua_State *L) {
|
int guiLuaApi::l_get_dirlist(lua_State *L) {
|
||||||
const char *path = luaL_checkstring(L, 1);
|
const char *path = luaL_checkstring(L, 1);
|
||||||
|
@ -164,6 +164,8 @@ private:
|
|||||||
static int l_get_modpath(lua_State *L);
|
static int l_get_modpath(lua_State *L);
|
||||||
|
|
||||||
static int l_get_gamepath(lua_State *L);
|
static int l_get_gamepath(lua_State *L);
|
||||||
|
|
||||||
|
static int l_get_texturepath(lua_State *L);
|
||||||
|
|
||||||
static int l_get_dirlist(lua_State *L);
|
static int l_get_dirlist(lua_State *L);
|
||||||
|
|
||||||
|
@ -4273,8 +4273,7 @@ void Server::fillMediaCache()
|
|||||||
paths.push_back(mod.path + DIR_DELIM + "media");
|
paths.push_back(mod.path + DIR_DELIM + "media");
|
||||||
paths.push_back(mod.path + DIR_DELIM + "models");
|
paths.push_back(mod.path + DIR_DELIM + "models");
|
||||||
}
|
}
|
||||||
std::string path_all = "textures";
|
paths.push_back(porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
|
||||||
paths.push_back(path_all + DIR_DELIM + "all");
|
|
||||||
|
|
||||||
// Collect media file information from paths into cache
|
// Collect media file information from paths into cache
|
||||||
for(std::list<std::string>::iterator i = paths.begin();
|
for(std::list<std::string>::iterator i = paths.begin();
|
||||||
|
17
src/tile.cpp
17
src/tile.cpp
@ -131,18 +131,6 @@ std::string getTexturePath(const std::string &filename)
|
|||||||
// Check all filename extensions. Returns "" if not found.
|
// Check all filename extensions. Returns "" if not found.
|
||||||
fullpath = getImagePath(testpath);
|
fullpath = getImagePath(testpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Check from $user/textures/all
|
|
||||||
*/
|
|
||||||
if(fullpath == "")
|
|
||||||
{
|
|
||||||
std::string texture_path = porting::path_user + DIR_DELIM
|
|
||||||
+ "textures" + DIR_DELIM + "all";
|
|
||||||
std::string testpath = texture_path + DIR_DELIM + filename;
|
|
||||||
// Check all filename extensions. Returns "" if not found.
|
|
||||||
fullpath = getImagePath(testpath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check from default data directory
|
Check from default data directory
|
||||||
@ -163,6 +151,11 @@ std::string getTexturePath(const std::string &filename)
|
|||||||
return fullpath;
|
return fullpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearTextureNameCache()
|
||||||
|
{
|
||||||
|
g_texturename_to_path_cache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Stores internal information about a texture.
|
Stores internal information about a texture.
|
||||||
*/
|
*/
|
||||||
|
@ -57,6 +57,8 @@ std::string getImagePath(std::string path);
|
|||||||
*/
|
*/
|
||||||
std::string getTexturePath(const std::string &filename);
|
std::string getTexturePath(const std::string &filename);
|
||||||
|
|
||||||
|
void clearTextureNameCache();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ITextureSource::generateTextureFromMesh parameters
|
ITextureSource::generateTextureFromMesh parameters
|
||||||
*/
|
*/
|
||||||
|
@ -118,6 +118,11 @@ public:
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clear ()
|
||||||
|
{
|
||||||
|
m_values.clear();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<Key, Value> m_values;
|
std::map<Key, Value> m_values;
|
||||||
|
@ -1 +0,0 @@
|
|||||||
If you haven't modified the texture_path setting, you can copy textures of your texture packs into here. Folders are currently not supported.
|
|
1
textures/texture_packs_here.txt
Normal file
1
textures/texture_packs_here.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Put your texture pack folders in this folder. Textures in the "server" pack will be used by the server.
|
Loading…
Reference in New Issue
Block a user