#include "map.h" #include #include #include #include #include "renderer.h" Map::Map(std::string_view filename, Renderer& renderer) { tmx::Map mapfile; if (!mapfile.load(filename.data())) { throw std::invalid_argument("Could not find map file: " + std::string(filename)); } const tmx::Vector2u& mapSize = mapfile.getTileCount(); mapSize_.x() = mapSize.x; mapSize_.y() = mapSize.y; const tmx::Vector2u& tileSize = mapfile.getTileSize(); tileSize_.x() = tileSize.x; tileSize_.y() = tileSize.y; int firstGID = 0; // There should only be one tileset. for (const tmx::Tileset& tileset : mapfile.getTilesets()) { firstGID = tileset.getFirstGID(); tilesetTextureId_ = renderer.loadImageFromFile(tileset.getImagePath()); tilesetColumns_ = tileset.getColumnCount(); } for (const auto& layer : mapfile.getLayers()) { if (layer->getType() == tmx::Layer::Type::Tile) { const auto& tileLayer = layer->getLayerAs(); std::vector tilesToStore; for (const auto& maptile : tileLayer.getTiles()) { tilesToStore.push_back(Tile { .id = maptile.ID - firstGID, .flipHorizontal = (maptile.flipFlags & tmx::TileLayer::Horizontal) != 0, .flipVertical = (maptile.flipFlags & tmx::TileLayer::Vertical) != 0 }); } layers_.push_back(std::move(tilesToStore)); } } }