diff options
author | David Thompson <dthompson2@worcester.edu> | 2014-09-06 13:21:46 -0400 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2014-10-22 21:05:14 +0200 |
commit | fd5eaae2babb322f8a3e2acab55a12e218814c8e (patch) | |
tree | e8ea385178798024e75cf20986f57ae80bb906d8 /src | |
parent | d221917170c2bb43c66e5e09f2a43350cf28d71b (diff) | |
download | minetest-fd5eaae2babb322f8a3e2acab55a12e218814c8e.tar.gz minetest-fd5eaae2babb322f8a3e2acab55a12e218814c8e.tar.bz2 minetest-fd5eaae2babb322f8a3e2acab55a12e218814c8e.zip |
Search for subgames using $MINETEST_SUBGAME_PATH.
Diffstat (limited to 'src')
-rw-r--r-- | src/subgame.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/subgame.cpp b/src/subgame.cpp index f2465c93e..e86655bc1 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "settings.h" #include "log.h" +#include "strfnd.h" #ifndef SERVER #include "tile.h" // getImagePath #endif @@ -59,6 +60,17 @@ struct GameFindPath {} }; +Strfnd getSubgamePathEnv() { + std::string sp; + char *subgame_path = getenv("MINETEST_SUBGAME_PATH"); + + if(subgame_path) { + sp = std::string(subgame_path); + } + + return Strfnd(sp); +} + SubgameSpec findSubgame(const std::string &id) { if(id == "") @@ -66,6 +78,17 @@ SubgameSpec findSubgame(const std::string &id) std::string share = porting::path_share; std::string user = porting::path_user; std::vector<GameFindPath> find_paths; + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + std::string path = search_paths.next(":"); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id, false)); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id + "_game", false)); + } + find_paths.push_back(GameFindPath( user + DIR_DELIM + "games" + DIR_DELIM + id + "_game", true)); find_paths.push_back(GameFindPath( @@ -129,6 +152,13 @@ std::set<std::string> getAvailableGameIds() std::set<std::string> gamespaths; gamespaths.insert(porting::path_share + DIR_DELIM + "games"); gamespaths.insert(porting::path_user + DIR_DELIM + "games"); + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + gamespaths.insert(search_paths.next(":")); + } + for(std::set<std::string>::const_iterator i = gamespaths.begin(); i != gamespaths.end(); i++){ std::vector<fs::DirListNode> dirlist = fs::GetDirListing(*i); |