Line data Source code
1 : /*
2 : Minetest
3 : Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 :
5 : This program is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU Lesser General Public License as published by
7 : the Free Software Foundation; either version 2.1 of the License, or
8 : (at your option) any later version.
9 :
10 : This program is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : GNU Lesser General Public License for more details.
14 :
15 : You should have received a copy of the GNU Lesser General Public License along
16 : with this program; if not, write to the Free Software Foundation, Inc.,
17 : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 : */
19 :
20 : #ifndef SUBGAME_HEADER
21 : #define SUBGAME_HEADER
22 :
23 : #include <string>
24 : #include <set>
25 : #include <vector>
26 :
27 : class Settings;
28 :
29 : #define WORLDNAME_BLACKLISTED_CHARS "/\\"
30 :
31 15 : struct SubgameSpec
32 : {
33 : std::string id; // "" = game does not exist
34 : std::string path; // path to game
35 : std::string gamemods_path; //path to mods of the game
36 : std::set<std::string> addon_mods_paths; //paths to addon mods for this game
37 : std::string name;
38 : std::string menuicon_path;
39 :
40 7 : SubgameSpec(const std::string &id_="",
41 : const std::string &path_="",
42 : const std::string &gamemods_path_="",
43 : const std::set<std::string> &addon_mods_paths_=std::set<std::string>(),
44 : const std::string &name_="",
45 : const std::string &menuicon_path_=""):
46 : id(id_),
47 : path(path_),
48 : gamemods_path(gamemods_path_),
49 : addon_mods_paths(addon_mods_paths_),
50 : name(name_),
51 7 : menuicon_path(menuicon_path_)
52 7 : {}
53 :
54 2 : bool isValid() const
55 : {
56 2 : return (id != "" && path != "");
57 : }
58 : };
59 :
60 : // minetest.conf
61 : bool getGameMinetestConfig(const std::string &game_path, Settings &conf);
62 : // game.conf
63 : bool getGameConfig(const std::string &game_path, Settings &conf);
64 :
65 : std::string getGameName(const std::string &game_path);
66 :
67 : SubgameSpec findSubgame(const std::string &id);
68 : SubgameSpec findWorldSubgame(const std::string &world_path);
69 :
70 : std::set<std::string> getAvailableGameIds();
71 : std::vector<SubgameSpec> getAvailableGames();
72 :
73 : bool getWorldExists(const std::string &world_path);
74 : std::string getWorldGameId(const std::string &world_path,
75 : bool can_be_legacy=false);
76 :
77 10 : struct WorldSpec
78 : {
79 : std::string path;
80 : std::string name;
81 : std::string gameid;
82 :
83 4 : WorldSpec(
84 : const std::string &path_="",
85 : const std::string &name_="",
86 : const std::string &gameid_=""
87 : ):
88 : path(path_),
89 : name(name_),
90 4 : gameid(gameid_)
91 4 : {}
92 :
93 3 : bool isValid() const
94 : {
95 3 : return (name != "" && path != "" && gameid != "");
96 : }
97 : };
98 :
99 : std::vector<WorldSpec> getAvailableWorlds();
100 :
101 : // loads the subgame's config and creates world directory
102 : // and world.mt if they don't exist
103 : bool loadGameConfAndInitWorld(const std::string &path, const SubgameSpec &gamespec);
104 :
105 : #endif
106 :
|