Tileson 1.4.0
A helpful json parser for Tiled maps
Loading...
Searching...
No Matches
Tile.hpp
Go to the documentation of this file.
1//
2// Created by robin on 22.03.2020.
3//
4
5#ifndef TILESON_TILE_HPP
6#define TILESON_TILE_HPP
7
8//#include "../external/json.hpp"
9#include "../objects/Vector2.hpp"
10#include "../objects/Color.hpp"
11#include "Frame.hpp"
12#include "Animation.hpp"
13#include "../objects/PropertyCollection.hpp"
14#include "Layer.hpp"
15#include "../objects/Rect.hpp"
16
17namespace tson
18{
19 class Tileset;
20 class TiledClass;
21
22 class Tile
23 {
24 public:
25 inline Tile() = default;
26 inline Tile(IJson &json, tson::Tileset *tileset, tson::Map *map);
27 inline Tile(uint32_t id, tson::Tileset *tileset, tson::Map *map);
28 inline Tile(uint32_t id, tson::Map *map); //v1.2.0
29 inline bool parse(IJson &json, tson::Tileset *tileset, tson::Map *map);
30 inline bool parseId(IJson &json);
31
32 [[nodiscard]] inline uint32_t getId() const;
33 [[nodiscard]] inline const fs::path &getImage() const;
34 [[nodiscard]] inline const Vector2i &getImageSize() const;
35 [[nodiscard]] inline const std::string &getType() const;
36 [[nodiscard]] inline const std::string &getClassType() const;
37 [[nodiscard]] inline tson::TiledClass *getClass();
39 //[[nodiscard]] inline const std::vector<tson::Frame> &getAnimation() const;
40 [[nodiscard]] inline tson::Animation &getAnimation();
41 [[nodiscard]] inline Layer &getObjectgroup();
42 [[nodiscard]] inline PropertyCollection &getProperties();
43 [[nodiscard]] inline const std::vector<int> &getTerrain() const;
44
45 template <typename T>
46 inline T get(const std::string &name);
47 inline tson::Property * getProp(const std::string &name);
48
49 //v1.2.0-stuff
50 inline void setProperties(const tson::PropertyCollection &properties);
51
52 [[nodiscard]] inline tson::Tileset * getTileset() const;
53 [[nodiscard]] inline tson::Map * getMap() const;
54 [[nodiscard]] inline const tson::Rect &getDrawingRect() const;
55 [[nodiscard]] inline const Rect &getSubRectangle() const;
56
57 inline const tson::Vector2f getPosition(const std::tuple<int, int> &tileDataPos);
58 inline const tson::Vector2i getPositionInTileUnits(const std::tuple<int, int> &tileDataPos);
59 [[nodiscard]] inline const tson::Vector2i getTileSize() const;
61 [[nodiscard]] inline TileFlipFlags getFlipFlags() const;
62 inline bool hasFlipFlags(TileFlipFlags flags);
63 [[nodiscard]] inline uint32_t getGid() const;
64
65 inline void addTilesetAndPerformCalculations(tson::Tileset *tileset); //v1.2.0
66
67
68 private:
69 tson::Animation m_animation{};
70 uint32_t m_id {};
72 fs::path m_image;
74 tson::Vector2i m_imageSize;
75 tson::Layer m_objectgroup;
76 tson::PropertyCollection m_properties;
77 std::vector<int> m_terrain;
78 std::string m_type;
80 //v1.2.0-stuff
81 uint32_t m_gid {};
82 tson::Tileset * m_tileset;
83 tson::Map * m_map;
84 tson::Rect m_drawingRect;
85 tson::Rect m_subRect;
87 inline void performDataCalculations();
88 inline void manageFlipFlagsByIdThenRemoveFlags(uint32_t &id);
89 friend class Layer;
90 std::shared_ptr<tson::TiledClass> m_class {};
91 };
92
99 template<typename T>
100 T tson::Tile::get(const std::string &name)
101 {
102 return m_properties.getValue<T>(name);
103 }
104}
105
107{
108 parse(json, tileset, map);
109}
110
115tson::Tile::Tile(uint32_t id, tson::Tileset *tileset, tson::Map *map) : m_id {id}, m_gid {id}
116{
117 m_tileset = tileset;
118 m_map = map;
119 manageFlipFlagsByIdThenRemoveFlags(m_gid);
120 performDataCalculations();
121}
122
127tson::Tile::Tile(uint32_t id, tson::Map *map) : m_id {id}, m_gid {id}
128{
129 m_map = map;
130 manageFlipFlagsByIdThenRemoveFlags(m_gid);
131}
132
138{
139 m_tileset = tileset;
140 performDataCalculations();
141}
142
143
144
149uint32_t tson::Tile::getId() const
150{
151 return m_id;
152}
153
159const fs::path &tson::Tile::getImage() const { return m_image; }
160
166{
167 return m_imageSize;
168}
169
175const std::string &tson::Tile::getType() const
176{
177 return m_type;
178}
179
185const std::string &tson::Tile::getClassType() const
186{
187 return m_type;
188}
189
195{
196 return m_animation;
197}
198
204{
205 return m_objectgroup;
206}
207
213{
214 return m_properties;
215}
216
221const std::vector<int> &tson::Tile::getTerrain() const
222{
223 return m_terrain;
224}
225
231tson::Property *tson::Tile::getProp(const std::string &name)
232{
233 if(m_properties.hasProperty(name))
234 return m_properties.getProperty(name);
235
236 return nullptr;
237}
238
244{
245 return m_tileset;
246}
247
253{
254 return m_map;
255}
256
262{
263 return m_drawingRect;
264}
265
276const tson::Vector2i tson::Tile::getPositionInTileUnits(const std::tuple<int, int> &tileDataPos)
277{
278 return {std::get<0>(tileDataPos), std::get<1>(tileDataPos)};
279}
280
281void tson::Tile::manageFlipFlagsByIdThenRemoveFlags(uint32_t &id)
282{
283 if (id & FLIPPED_HORIZONTALLY_FLAG) m_flipFlags |= TileFlipFlags::Horizontally;
284 if (id & FLIPPED_VERTICALLY_FLAG) m_flipFlags |= TileFlipFlags::Vertically;
285 if (id & FLIPPED_DIAGONALLY_FLAG) m_flipFlags |= TileFlipFlags::Diagonally;
286
287 id &= ~(FLIPPED_HORIZONTALLY_FLAG | FLIPPED_VERTICALLY_FLAG | FLIPPED_DIAGONALLY_FLAG);
288}
289
291{
292 return m_flipFlags;
293}
294
304{
305 return ((m_flipFlags & flags) == flags) ? true : false;
306}
307
308uint32_t tson::Tile::getGid() const
309{
310 return m_gid;
311}
312
314{
315 m_properties = properties;
316}
317
323{
324 return m_subRect;
325}
326
327
328#endif //TILESON_TILE_HPP
Definition Animation.hpp:11
Definition IJson.hpp:11
Definition Layer.hpp:26
Definition Map.hpp:29
Definition PropertyCollection.hpp:15
Definition Property.hpp:23
Definition Rect.hpp:11
Definition Tile.hpp:23
const fs::path & getImage() const
Definition Tile.hpp:159
TileFlipFlags getFlipFlags() const
Definition Tile.hpp:290
const Rect & getSubRectangle() const
Definition Tile.hpp:322
uint32_t getGid() const
Definition Tile.hpp:308
const tson::Vector2f getPosition(const std::tuple< int, int > &tileDataPos)
Definition tileson_forward.hpp:156
const std::string & getType() const
Definition Tile.hpp:175
const std::vector< int > & getTerrain() const
Definition Tile.hpp:221
PropertyCollection & getProperties()
Definition Tile.hpp:212
const tson::Vector2i getTileSize() const
Definition tileson_forward.hpp:98
tson::Property * getProp(const std::string &name)
Definition Tile.hpp:231
bool parseId(IJson &json)
Definition tileson_forward.hpp:106
bool hasFlipFlags(TileFlipFlags flags)
Definition Tile.hpp:303
const Vector2i & getImageSize() const
Definition Tile.hpp:165
bool parse(IJson &json, tson::Tileset *tileset, tson::Map *map)
Definition tileson_forward.hpp:42
Layer & getObjectgroup()
Definition Tile.hpp:203
const std::string & getClassType() const
Definition Tile.hpp:185
tson::Tileset * getTileset() const
Definition Tile.hpp:243
Tile()=default
const tson::Vector2i getPositionInTileUnits(const std::tuple< int, int > &tileDataPos)
Definition Tile.hpp:276
tson::Animation & getAnimation()
Definition Tile.hpp:194
void addTilesetAndPerformCalculations(tson::Tileset *tileset)
Definition Tile.hpp:137
tson::Map * getMap() const
Definition Tile.hpp:252
void setProperties(const tson::PropertyCollection &properties)
Definition Tile.hpp:313
uint32_t getId() const
Definition Tile.hpp:149
tson::TiledClass * getClass()
Definition tileson_forward.hpp:166
T get(const std::string &name)
Definition Tile.hpp:100
const tson::Rect & getDrawingRect() const
Definition Tile.hpp:261
Definition TiledClass.hpp:11
Definition Tileset.hpp:24
Definition Base64.hpp:12
TileFlipFlags
Definition Enums.hpp:77