5#ifndef TILESON_LAYER_HPP
6#define TILESON_LAYER_HPP
10#include "../objects/Vector2.hpp"
11#include "../objects/Color.hpp"
14#include "../objects/TileObject.hpp"
15#include "../objects/Property.hpp"
16#include "../objects/PropertyCollection.hpp"
17#include "../common/Enums.hpp"
18#include "../objects/FlaggedTile.hpp"
33 [[nodiscard]]
inline const std::vector<uint32_t> &
getData()
const;
34 [[nodiscard]]
inline const std::string &
getBase64Data()
const;
35 [[nodiscard]]
inline const std::string &
getDrawOrder()
const;
36 [[nodiscard]]
inline const std::string &
getEncoding()
const;
37 [[nodiscard]]
inline int getId()
const;
38 [[nodiscard]]
inline const std::string &
getImage()
const;
39 [[nodiscard]]
inline const std::string &
getName()
const;
49 [[nodiscard]]
inline const std::string &
getClassType()
const;
52 [[nodiscard]]
inline const std::string &
getTypeStr()
const;
53 [[nodiscard]]
inline bool isVisible()
const;
54 [[nodiscard]]
inline int getX()
const;
55 [[nodiscard]]
inline int getY()
const;
57 [[nodiscard]]
inline std::vector<tson::Chunk> &
getChunks();
58 [[nodiscard]]
inline std::vector<tson::Layer> &
getLayers();
59 [[nodiscard]]
inline std::vector<tson::Object> &
getObjects();
68 inline T
get(
const std::string &name);
71 inline void assignTileMap(std::map<uint32_t, tson::Tile*> *tileMap);
87 inline void setTypeByString();
89 std::vector<tson::Chunk> m_chunks;
90 std::string m_compression;
91 std::vector<uint32_t> m_data;
93 std::string m_base64Data;
95 std::string m_drawOrder;
96 std::string m_encoding;
99 std::vector<tson::Layer> m_layers;
101 std::vector<tson::Object> m_objects;
109 std::string m_typeStr;
119 std::map<uint32_t, tson::Tile*> *m_tileMap;
120 std::map<std::tuple<int, int>,
tson::Tile*> m_tileData;
125 inline void decompressData();
126 inline void queueFlaggedTile(
size_t x,
size_t y, uint32_t
id);
130 std::set<uint32_t> m_uniqueFlaggedTiles;
131 std::vector<tson::FlaggedTile> m_flaggedTiles;
133 std::string m_classType{};
134 std::shared_ptr<tson::TiledClass> m_class {};
146 return m_properties.
getValue<T>(name);
159void tson::Layer::queueFlaggedTile(
size_t x,
size_t y, uint32_t
id)
161 uint32_t tileId = id;
162 tileId &= ~(FLIPPED_HORIZONTALLY_FLAG | FLIPPED_VERTICALLY_FLAG | FLIPPED_DIAGONALLY_FLAG);
163 m_uniqueFlaggedTiles.insert(
id);
164 m_flaggedTiles.emplace_back(x, y,
id, tileId);
174 std::vector<tson::Object> found;
176 std::copy_if(m_objects.begin(), m_objects.end(), std::back_inserter(found), [&](
const tson::Object &item)
178 return item.getName() == name;
193 std::vector<tson::Object> found;
195 std::copy_if(m_objects.begin(), m_objects.end(), std::back_inserter(found), [&](
const tson::Object &item)
197 return item.getObjectType() == type;
210 auto result = std::find_if(m_objects.begin(), m_objects.end(), [&](
const tson::Object &obj){return obj.getName() == name; });
211 if(result == m_objects.end())
214 return &result.operator*();
224 auto result = std::find_if(m_objects.begin(), m_objects.end(), [&](
const tson::Object &obj){return obj.getId() == id; });
225 if(result == m_objects.end())
228 return &result.operator*();
235void tson::Layer::setTypeByString()
250 return m_compression;
350 return m_transparentColor;
432 if(m_properties.hasProperty(name))
433 return m_properties.getProperty(name);
484 return (m_tileData.count({x, y}) > 0) ? m_tileData[{x,y}] :
nullptr;
509 std::for_each(m_data.begin(), m_data.end(), [&](uint32_t tileId)
511 if (static_cast<int>(x) == mapSize.x)
517 if (tileId > 0 && m_tileMap->count(tileId) > 0)
519 m_tileData[{static_cast<int>(x), static_cast<int>(y)}] = m_tileMap->at(tileId);
520 m_tileObjects[{
static_cast<int>(x),
static_cast<int>(y)}] = {{
static_cast<int>(x),
static_cast<int>(y)}, m_tileData[{
static_cast<int>(x),
static_cast<int>(y)}]};
522 else if(tileId > 0 && m_tileMap->count(tileId) == 0)
524 queueFlaggedTile(x, y, tileId);
534 return m_tileObjects;
539 return (m_tileObjects.count({x, y}) > 0) ? &m_tileObjects[{x,y}] :
nullptr;
544 return m_uniqueFlaggedTiles;
549 std::for_each(m_flaggedTiles.begin(), m_flaggedTiles.end(), [&](
const tson::FlaggedTile &tile)
551 if (tile.id > 0 && m_tileMap->count(tile.id) > 0)
553 m_tileData[{static_cast<int>(tile.x), static_cast<int>(tile.y)}] = m_tileMap->at(tile.id);
554 m_tileObjects[{static_cast<int>(tile.x), static_cast<int>(tile.y)}] = {{static_cast<int>(tile.x), static_cast<int>(tile.y)}, m_tileData[{static_cast<int>(tile.x), static_cast<int>(tile.y)}]};
Definition FlaggedTile.hpp:11
std::vector< tson::Object > getObjectsByType(tson::ObjectType type)
Definition Layer.hpp:191
const std::map< std::tuple< int, int >, tson::Tile * > & getTileData() const
Definition Layer.hpp:465
std::vector< tson::Layer > & getLayers()
Definition Layer.hpp:402
void createTileData(const Vector2i &mapSize, bool isInfiniteMap)
Definition Layer.hpp:503
const std::string & getBase64Data() const
Definition Layer.hpp:266
PropertyCollection & getProperties()
Definition Layer.hpp:420
tson::Object * firstObj(const std::string &name)
Definition Layer.hpp:208
void assignTileMap(std::map< uint32_t, tson::Tile * > *tileMap)
Definition Layer.hpp:450
int getId() const
Definition Layer.hpp:293
bool hasRepeatY() const
Definition Layer.hpp:594
tson::Object * getObj(int id)
Definition Layer.hpp:222
const std::string & getName() const
Definition Layer.hpp:311
bool parse(IJson &json, tson::Map *map)
Definition tileson_forward.hpp:259
std::map< std::tuple< int, int >, tson::TileObject > & getTileObjects()
Definition Layer.hpp:532
LayerType getType() const
Definition Layer.hpp:441
const Vector2i & getSize() const
Definition Layer.hpp:339
T get(const std::string &name)
Definition Layer.hpp:144
tson::TiledClass * getClass()
Definition tileson_forward.hpp:336
std::vector< tson::Chunk > & getChunks()
Definition Layer.hpp:393
tson::Map * getMap() const
Definition Layer.hpp:491
void resolveFlaggedTiles()
Definition Layer.hpp:547
const std::string & getEncoding() const
Definition Layer.hpp:284
float getOpacity() const
Definition Layer.hpp:329
const std::vector< uint32_t > & getData() const
Definition Layer.hpp:257
const std::string & getCompression() const
Definition Layer.hpp:248
bool hasRepeatX() const
Definition Layer.hpp:584
const std::set< uint32_t > & getUniqueFlaggedTiles() const
Definition Layer.hpp:542
const Vector2f & getOffset() const
Definition Layer.hpp:320
tson::Property * getProp(const std::string &name)
Definition Layer.hpp:430
bool isVisible() const
Definition Layer.hpp:366
const std::string & getTypeStr() const
Definition Layer.hpp:357
const std::string & getClassType() const
Definition Layer.hpp:599
const Colori & getTransparentColor() const
Definition Layer.hpp:348
tson::TileObject * getTileObject(int x, int y)
Definition Layer.hpp:537
const Colori & getTintColor() const
Definition Layer.hpp:564
const std::string & getImage() const
Definition Layer.hpp:302
const Vector2f & getParallax() const
Definition Layer.hpp:574
std::vector< tson::Object > & getObjects()
Definition Layer.hpp:411
int getX() const
Definition Layer.hpp:375
const std::string & getDrawOrder() const
Definition Layer.hpp:275
std::vector< tson::Object > getObjectsByName(const std::string &name)
Definition Layer.hpp:172
int getY() const
Definition Layer.hpp:384
Definition PropertyCollection.hpp:15
T getValue(const std::string &name)
Definition PropertyCollection.hpp:47
Definition Property.hpp:23
Definition TileObject.hpp:14
Definition TiledClass.hpp:11
ObjectType
Definition Enums.hpp:58
LayerType
Definition Enums.hpp:34