Merged changes from branches/supertux-milestone2-grumbel/ to trunk/supertux/
[supertux.git] / src / supertux / level.hpp
1 //  SuperTux
2 //  Copyright (C) 2006 Matthias Braun <matze@braunis.de>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #ifndef HEADER_SUPERTUX_SUPERTUX_LEVEL_HPP
18 #define HEADER_SUPERTUX_SUPERTUX_LEVEL_HPP
19
20 #include "supertux/statistics.hpp"
21 #include "util/reader_fwd.hpp"
22
23 class TileSet;
24 class Sector;
25
26 /**
27  * Represents a collection of Sectors running in a single GameSession.
28  *
29  * Each Sector in turn contains GameObjects, e.g. Badguys and Players.
30  */
31 class Level
32 {
33 public:
34   typedef std::vector<Sector*> Sectors;
35
36   std::string name;
37   std::string author;
38   std::string contact;
39   std::string license;
40   std::string filename;
41   std::string on_menukey_script;
42   Sectors     sectors;
43   Statistics  stats;
44   TileSet    *tileset;
45   bool        free_tileset;
46
47 public:
48   Level();
49   ~Level();
50
51   // loads a levelfile
52   void load(const std::string& filename);
53
54   const std::string& get_name() const
55   { return name; }
56
57   const std::string& get_author() const
58   { return author; }
59
60   void add_sector(Sector* sector);
61
62   Sector* get_sector(const std::string& name);
63
64   size_t get_sector_count();
65   Sector* get_sector(size_t num);
66
67   const TileSet *get_tileset() const
68   { return tileset; }
69
70   int get_total_coins();
71   int get_total_badguys();
72   int get_total_secrets();
73
74 private:
75   void load_old_format(const Reader& reader);
76
77 private:
78   Level(const Level&);
79   Level& operator=(const Level&);
80 };
81
82 #endif /*SUPERTUX_LEVEL_H*/
83
84 /* EOF */