From 383153419bef744af4bfa5f5d54c4bee663a5ce6 Mon Sep 17 00:00:00 2001 From: Novatux Date: Fri, 2 Aug 2013 15:18:48 +0200 Subject: Add texture pack selection to main menu --- src/game.cpp | 1 + src/guiLuaApi.cpp | 10 ++++++++++ src/guiLuaApi.h | 2 ++ src/server.cpp | 3 +-- src/tile.cpp | 17 +++++------------ src/tile.h | 2 ++ src/util/container.h | 5 +++++ 7 files changed, 26 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/game.cpp b/src/game.cpp index 205c34515..cb2a50823 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3482,6 +3482,7 @@ void the_game( infostream << "\t\t" << i << ":" << texture->getName().getPath().c_str() << std::endl; } + clearTextureNameCache(); infostream << "\tRemaining materials: " << driver-> getMaterialRendererCount () << " (note: irrlicht doesn't support removing renderers)"<< std::endl; diff --git a/src/guiLuaApi.cpp b/src/guiLuaApi.cpp index 485cab883..5d3e9dc12 100644 --- a/src/guiLuaApi.cpp +++ b/src/guiLuaApi.cpp @@ -82,6 +82,7 @@ void guiLuaApi::initialize(lua_State* L,GUIEngine* engine) retval &= API_FCT(set_topleft_text); retval &= API_FCT(get_modpath); retval &= API_FCT(get_gamepath); + retval &= API_FCT(get_texturepath); retval &= API_FCT(get_dirlist); retval &= API_FCT(create_dir); retval &= API_FCT(delete_dir); @@ -829,6 +830,15 @@ int guiLuaApi::l_get_gamepath(lua_State *L) 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) { const char *path = luaL_checkstring(L, 1); diff --git a/src/guiLuaApi.h b/src/guiLuaApi.h index 11b94ba75..9555f00c5 100644 --- a/src/guiLuaApi.h +++ b/src/guiLuaApi.h @@ -164,6 +164,8 @@ private: static int l_get_modpath(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); diff --git a/src/server.cpp b/src/server.cpp index 4099d9997..f5f6645a2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4273,8 +4273,7 @@ void Server::fillMediaCache() paths.push_back(mod.path + DIR_DELIM + "media"); paths.push_back(mod.path + DIR_DELIM + "models"); } - std::string path_all = "textures"; - paths.push_back(path_all + DIR_DELIM + "all"); + paths.push_back(porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server"); // Collect media file information from paths into cache for(std::list::iterator i = paths.begin(); diff --git a/src/tile.cpp b/src/tile.cpp index 6e4fde011..726f7f602 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -131,18 +131,6 @@ std::string getTexturePath(const std::string &filename) // Check all filename extensions. Returns "" if not found. 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 @@ -163,6 +151,11 @@ std::string getTexturePath(const std::string &filename) return fullpath; } +void clearTextureNameCache() +{ + g_texturename_to_path_cache.clear(); +} + /* Stores internal information about a texture. */ diff --git a/src/tile.h b/src/tile.h index 8008d2127..23c214350 100644 --- a/src/tile.h +++ b/src/tile.h @@ -57,6 +57,8 @@ std::string getImagePath(std::string path); */ std::string getTexturePath(const std::string &filename); +void clearTextureNameCache(); + /* ITextureSource::generateTextureFromMesh parameters */ diff --git a/src/util/container.h b/src/util/container.h index 9bb388f0e..84616d2db 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -118,6 +118,11 @@ public: } return result; } + + void clear () + { + m_values.clear(); + } private: std::map m_values; -- cgit v1.2.3