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 #pragma once 21 22 #include <string> 23 #include <set> 24 #include <vector> 25 26 class Settings; 27 28 struct SubgameSpec 29 { 30 std::string id; 31 std::string name; 32 std::string author; 33 int release; 34 std::string path; 35 std::string gamemods_path; 36 std::set<std::string> addon_mods_paths; 37 std::string menuicon_path; 38 39 SubgameSpec(const std::string &id = "", const std::string &path = "", 40 const std::string &gamemods_path = "", 41 const std::set<std::string> &addon_mods_paths = 42 std::set<std::string>(), 43 const std::string &name = "", 44 const std::string &menuicon_path = "", 45 const std::string &author = "", int release = 0) : idSubgameSpec46 id(id), 47 name(name), author(author), release(release), path(path), 48 gamemods_path(gamemods_path), addon_mods_paths(addon_mods_paths), 49 menuicon_path(menuicon_path) 50 { 51 } 52 isValidSubgameSpec53 bool isValid() const { return (!id.empty() && !path.empty()); } 54 }; 55 56 SubgameSpec findSubgame(const std::string &id); 57 SubgameSpec findWorldSubgame(const std::string &world_path); 58 59 std::set<std::string> getAvailableGameIds(); 60 std::vector<SubgameSpec> getAvailableGames(); 61 62 bool getWorldExists(const std::string &world_path); 63 //! Try to get the displayed name of a world 64 std::string getWorldName(const std::string &world_path, const std::string &default_name); 65 std::string getWorldGameId(const std::string &world_path, bool can_be_legacy = false); 66 67 struct WorldSpec 68 { 69 std::string path; 70 std::string name; 71 std::string gameid; 72 73 WorldSpec(const std::string &path = "", const std::string &name = "", 74 const std::string &gameid = "") : pathWorldSpec75 path(path), 76 name(name), gameid(gameid) 77 { 78 } 79 isValidWorldSpec80 bool isValid() const 81 { 82 return (!name.empty() && !path.empty() && !gameid.empty()); 83 } 84 }; 85 86 std::vector<WorldSpec> getAvailableWorlds(); 87 88 // loads the subgame's config and creates world directory 89 // and world.mt if they don't exist 90 void loadGameConfAndInitWorld(const std::string &path, const std::string &name, 91 const SubgameSpec &gamespec, bool create_world); 92