From a475b843e7d37f128ce30140d193f0312aa70c9c Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 2 Feb 2021 15:36:09 -0500 Subject: Using tmxlite instead of Tileson --- src/map.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/map.cpp (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp new file mode 100644 index 0000000..a60cbba --- /dev/null +++ b/src/map.cpp @@ -0,0 +1,46 @@ +#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)); + } + } +} -- cgit 1.4.1