summary refs log tree commit diff stats
path: root/src/map.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-02 15:36:09 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-02 15:36:09 -0500
commita475b843e7d37f128ce30140d193f0312aa70c9c (patch)
tree99432d35d61aa14c1ac17311694a8ae62675d3a6 /src/map.cpp
parent7166c9b831f9c6a50ba42272682b776d01e5703e (diff)
downloadtanetane-a475b843e7d37f128ce30140d193f0312aa70c9c.tar.gz
tanetane-a475b843e7d37f128ce30140d193f0312aa70c9c.tar.bz2
tanetane-a475b843e7d37f128ce30140d193f0312aa70c9c.zip
Using tmxlite instead of Tileson
Diffstat (limited to 'src/map.cpp')
-rw-r--r--src/map.cpp46
1 files changed, 46 insertions, 0 deletions
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 @@
1#include "map.h"
2#include <tmxlite/Map.hpp>
3#include <tmxlite/Layer.hpp>
4#include <tmxlite/TileLayer.hpp>
5#include <tmxlite/Tileset.hpp>
6#include "renderer.h"
7
8Map::Map(std::string_view filename, Renderer& renderer) {
9 tmx::Map mapfile;
10 if (!mapfile.load(filename.data())) {
11 throw std::invalid_argument("Could not find map file: " + std::string(filename));
12 }
13
14 const tmx::Vector2u& mapSize = mapfile.getTileCount();
15 mapSize_.x() = mapSize.x;
16 mapSize_.y() = mapSize.y;
17
18 const tmx::Vector2u& tileSize = mapfile.getTileSize();
19 tileSize_.x() = tileSize.x;
20 tileSize_.y() = tileSize.y;
21
22 int firstGID = 0;
23 // There should only be one tileset.
24 for (const tmx::Tileset& tileset : mapfile.getTilesets()) {
25 firstGID = tileset.getFirstGID();
26 tilesetTextureId_ = renderer.loadImageFromFile(tileset.getImagePath());
27 tilesetColumns_ = tileset.getColumnCount();
28 }
29
30 for (const auto& layer : mapfile.getLayers()) {
31 if (layer->getType() == tmx::Layer::Type::Tile) {
32 const auto& tileLayer = layer->getLayerAs<tmx::TileLayer>();
33
34 std::vector<Tile> tilesToStore;
35
36 for (const auto& maptile : tileLayer.getTiles()) {
37 tilesToStore.push_back(Tile {
38 .id = maptile.ID - firstGID,
39 .flipHorizontal = (maptile.flipFlags & tmx::TileLayer::Horizontal) != 0,
40 .flipVertical = (maptile.flipFlags & tmx::TileLayer::Vertical) != 0 });
41 }
42
43 layers_.push_back(std::move(tilesToStore));
44 }
45 }
46}