1// SuperTux
2// Copyright (C) 2008 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_TILE_SET_HPP
18#define HEADER_SUPERTUX_SUPERTUX_TILE_SET_HPP
19
20#include <memory>
21#include <stdint.h>
22#include <string>
23
24#include "video/color.hpp"
25#include "video/surface_ptr.hpp"
26
27class Canvas;
28class DrawingContext;
29class Tile;
30class Vector;
31
32class Tilegroup final
33{
34public:
35 Tilegroup();
36
37 bool developers_group = false;
38 std::string name;
39 std::vector<int> tiles;
40};
41
42class TileSet final
43{
44public:
45 static std::unique_ptr<TileSet> from_file(const std::string& filename);
46
47public:
48 TileSet();
49
50 void add_tile(int id, std::unique_ptr<Tile> tile);
51
52 /** Adds a group of tiles that haven't
53 been assigned to any other group */
54 void add_unassigned_tilegroup();
55
56 void add_tilegroup(const Tilegroup& tilegroup);
57
58 const Tile& get(const uint32_t id) const;
59
60 uint32_t get_max_tileid() const {
61 return static_cast<uint32_t>(m_tiles.size());
62 }
63
64 const std::vector<Tilegroup>& get_tilegroups() const {
65 return m_tilegroups;
66 }
67
68 void print_debug_info(const std::string& filename);
69
70private:
71 std::vector<std::unique_ptr<Tile> > m_tiles;
72 std::vector<Tilegroup> m_tilegroups;
73
74private:
75 TileSet(const TileSet&) = delete;
76 TileSet& operator=(const TileSet&) = delete;
77};
78
79#endif
80
81/* EOF */
82