#pragma once #include "tmxlite/Map.hpp" #include "tmxlite/TileLayer.hpp" #include #include #include #include #include #include #include class GameInternal; class Map { public: Map(const char* path); //[[deprecated("ID based text files are not supported anymore, use .tmx maps instead")]] //static void loadMap(const char* path, int sizeX, int sizeY, GameInternal* game, const std::map>* textureDict /* backreference */); //[[deprecated]] //static void addTile(unsigned long id, int x, int y, GameInternal* game, const std::map>* textureDict); /*! * \brief Loads a .tmx map * \param path Path to the `.tmx` map file * */ void generateTiles(); private: // required for initialisation struct MapData { const std::vector* tileSets; const std::vector* mapLayers; const tmx::Vector2u* mapSize; const tmx::Vector2u* mapTileSize; const std::vector* texturePaths; }; struct TileSetData { const char* texturePath{}; tmx::Vector2i textureSize; uint32_t tileCount{}; tmx::Vector2u tileCount2D; uint32_t firstGID{}; }; tmx::Map map; Map::MapData mapData; std::vector> tileConstructors; void loadTileLayer(const tmx::TileLayer& layer); static void addTile(float x, float y, const tmx::Vector2u& mapTileSize, int u, int v, int zIndex, const char* texturePath, bool hasCollision); template static std::optional getLayerProperty(const std::vector& properties, std::string propertyName) { return std::nullopt; }; };