5 #ifndef TILESON_TILE_HPP
6 #define TILESON_TILE_HPP
9 #include "../objects/Vector2.hpp"
10 #include "../objects/Color.hpp"
13 #include "../objects/PropertyCollection.hpp"
15 #include "../objects/Rect.hpp"
32 [[nodiscard]]
inline uint32_t
getId()
const;
34 [[nodiscard]]
inline const fs::path &
getImage()
const;
37 [[nodiscard]]
inline const std::string &
getType()
const;
43 [[nodiscard]]
inline const std::vector<int> &
getTerrain()
const;
46 inline T
get(
const std::string &name);
61 [[nodiscard]]
inline uint32_t
getGid()
const;
75 std::vector<int> m_terrain;
84 inline void performDataCalculations();
85 inline void manageFlipFlagsByIdThenRemoveFlags(uint32_t &
id);
98 return m_properties.getValue<T>(name);
104 parse(json, tileset, map);
115 manageFlipFlagsByIdThenRemoveFlags(m_gid);
116 performDataCalculations();
126 manageFlipFlagsByIdThenRemoveFlags(m_gid);
136 performDataCalculations();
149 if(json.
count(
"image") > 0) m_image = fs::path(json[
"image"].get<std::string>());
151 bool allFound = parseId(json);
153 if(json.
count(
"type") > 0) m_type = json[
"type"].
get<std::string>();
154 if(json.
count(
"objectgroup") > 0) m_objectgroup =
tson::Layer(json[
"objectgroup"], m_map);
156 if(json.
count(
"imagewidth") > 0 && json.
count(
"imageheight") > 0)
157 m_imageSize = {json[
"imagewidth"].
get<
int>(), json[
"imageheight"].get<int>()};
160 if(json.
count(
"animation") > 0 && json[
"animation"].
isArray())
162 auto &animation = json.
array(
"animation");
163 std::vector<tson::Frame> frames;
164 std::for_each(animation.begin(), animation.end(), [&](std::unique_ptr<IJson> &item) { frames.emplace_back(*item); });
165 if(frames.size() > 0)
167 m_animation.setFrames(frames);
170 if(json.
count(
"terrain") > 0 && json[
"terrain"].
isArray())
172 auto &terrain = json.
array(
"terrain");
173 std::for_each(terrain.begin(), terrain.end(), [&](std::unique_ptr<IJson> &item) { m_terrain.emplace_back(item->get<int>()); });
176 if(json.
count(
"properties") > 0 && json[
"properties"].
isArray())
178 auto &properties = json.
array(
"properties");
179 std::for_each(properties.begin(), properties.end(), [&](std::unique_ptr<IJson> &item) { m_properties.add(*item); });
182 performDataCalculations();
236 return m_objectgroup;
264 if(m_properties.hasProperty(name))
265 return m_properties.getProperty(name);
294 return m_drawingRect;
309 return {std::get<0>(tileDataPos), std::get<1>(tileDataPos)};
312 void tson::Tile::manageFlipFlagsByIdThenRemoveFlags(uint32_t &
id)
318 id &= ~(FLIPPED_HORIZONTALLY_FLAG | FLIPPED_VERTICALLY_FLAG | FLIPPED_DIAGONALLY_FLAG);
336 return ((m_flipFlags & flags) == flags) ? true :
false;
346 m_properties = properties;
Definition: Animation.hpp:11
T get(std::string_view key)
Definition: IJson.hpp:72
virtual bool isArray() const =0
virtual size_t count(std::string_view key) const =0
virtual std::vector< std::unique_ptr< IJson > > array()=0
Definition: PropertyCollection.hpp:15
Definition: Property.hpp:21
const fs::path & getImage() const
Definition: Tile.hpp:201
TileFlipFlags getFlipFlags() const
Definition: Tile.hpp:321
uint32_t getGid() const
Definition: Tile.hpp:339
const tson::Vector2f getPosition(const std::tuple< int, int > &tileDataPos)
Definition: tileson_forward.hpp:82
const std::string & getType() const
Definition: Tile.hpp:216
const std::vector< int > & getTerrain() const
Definition: Tile.hpp:252
PropertyCollection & getProperties()
Definition: Tile.hpp:243
const tson::Vector2i getTileSize() const
Definition: tileson_forward.hpp:25
tson::Property * getProp(const std::string &name)
Definition: Tile.hpp:262
bool parseId(IJson &json)
Definition: tileson_forward.hpp:33
bool hasFlipFlags(TileFlipFlags flags)
Definition: Tile.hpp:334
const Vector2i & getImageSize() const
Definition: Tile.hpp:207
bool parse(IJson &json, tson::Tileset *tileset, tson::Map *map)
Definition: Tile.hpp:144
const Layer & getObjectgroup() const
Definition: Tile.hpp:234
tson::Tileset * getTileset() const
Definition: Tile.hpp:274
const tson::Vector2i getPositionInTileUnits(const std::tuple< int, int > &tileDataPos)
Definition: Tile.hpp:307
tson::Animation & getAnimation()
Definition: Tile.hpp:225
void addTilesetAndPerformCalculations(tson::Tileset *tileset)
Definition: Tile.hpp:133
tson::Map * getMap() const
Definition: Tile.hpp:283
void setProperties(const tson::PropertyCollection &properties)
Definition: Tile.hpp:344
uint32_t getId() const
Definition: Tile.hpp:191
T get(const std::string &name)
Definition: Tile.hpp:96
const tson::Rect & getDrawingRect() const
Definition: Tile.hpp:292
Definition: Tileset.hpp:24
Definition: Base64.hpp:12
TileFlipFlags
Definition: Enums.hpp:74