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 19:34:48 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-02 19:34:48 -0500
commit93b3e4004387047c25b2f5a190aced01c9091934 (patch)
tree4bc8ff58dd7198bb2bfed77122547c9599b0ef0f /src/map.cpp
parent9f0e76a47da72573863b22bda72d55e6010def6b (diff)
downloadtanetane-93b3e4004387047c25b2f5a190aced01c9091934.tar.gz
tanetane-93b3e4004387047c25b2f5a190aced01c9091934.tar.bz2
tanetane-93b3e4004387047c25b2f5a190aced01c9091934.zip
Added collision with map tiles
Diffstat (limited to 'src/map.cpp')
-rw-r--r--src/map.cpp38
1 files changed, 29 insertions, 9 deletions
diff --git a/src/map.cpp b/src/map.cpp index a60cbba..7d9800d 100644 --- a/src/map.cpp +++ b/src/map.cpp
@@ -1,6 +1,7 @@
1#include "map.h" 1#include "map.h"
2#include <tmxlite/Map.hpp> 2#include <tmxlite/Map.hpp>
3#include <tmxlite/Layer.hpp> 3#include <tmxlite/Layer.hpp>
4#include <tmxlite/Property.hpp>
4#include <tmxlite/TileLayer.hpp> 5#include <tmxlite/TileLayer.hpp>
5#include <tmxlite/Tileset.hpp> 6#include <tmxlite/Tileset.hpp>
6#include "renderer.h" 7#include "renderer.h"
@@ -21,11 +22,10 @@ Map::Map(std::string_view filename, Renderer& renderer) {
21 22
22 int firstGID = 0; 23 int firstGID = 0;
23 // There should only be one tileset. 24 // There should only be one tileset.
24 for (const tmx::Tileset& tileset : mapfile.getTilesets()) { 25 const tmx::Tileset& tileset = mapfile.getTilesets()[0];
25 firstGID = tileset.getFirstGID(); 26 firstGID = tileset.getFirstGID();
26 tilesetTextureId_ = renderer.loadImageFromFile(tileset.getImagePath()); 27 tilesetTextureId_ = renderer.loadImageFromFile(tileset.getImagePath());
27 tilesetColumns_ = tileset.getColumnCount(); 28 tilesetColumns_ = tileset.getColumnCount();
28 }
29 29
30 for (const auto& layer : mapfile.getLayers()) { 30 for (const auto& layer : mapfile.getLayers()) {
31 if (layer->getType() == tmx::Layer::Type::Tile) { 31 if (layer->getType() == tmx::Layer::Type::Tile) {
@@ -34,13 +34,33 @@ Map::Map(std::string_view filename, Renderer& renderer) {
34 std::vector<Tile> tilesToStore; 34 std::vector<Tile> tilesToStore;
35 35
36 for (const auto& maptile : tileLayer.getTiles()) { 36 for (const auto& maptile : tileLayer.getTiles()) {
37 tilesToStore.push_back(Tile { 37 Tile tile;
38 .id = maptile.ID - firstGID, 38 tile.id = maptile.ID - firstGID;
39 .flipHorizontal = (maptile.flipFlags & tmx::TileLayer::Horizontal) != 0, 39 tile.flipHorizontal = (maptile.flipFlags & tmx::TileLayer::Horizontal) != 0;
40 .flipVertical = (maptile.flipFlags & tmx::TileLayer::Vertical) != 0 }); 40 tile.flipVertical = (maptile.flipFlags & tmx::TileLayer::Vertical) != 0;
41
42 for (const tmx::Property& property : tileset.getTile(maptile.ID)->properties) {
43 if (property.getName() == "solid" && property.getBoolValue()) {
44 tile.blocked = true;
45 }
46 }
47
48 tilesToStore.push_back(std::move(tile));
41 } 49 }
42 50
43 layers_.push_back(std::move(tilesToStore)); 51 layers_.push_back(std::move(tilesToStore));
44 } 52 }
45 } 53 }
46} 54}
55
56bool Map::isBlocked(int x, int y) const {
57 int i = x + y * mapSize_.w();
58
59 for (const std::vector<Tile>& layer : layers_) {
60 if (layer.at(i).blocked) {
61 return true;
62 }
63 }
64
65 return false;
66}