From 93b3e4004387047c25b2f5a190aced01c9091934 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 2 Feb 2021 19:34:48 -0500 Subject: Added collision with map tiles --- src/map.cpp | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) (limited to 'src/map.cpp') 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 @@ #include "map.h" #include #include +#include #include #include #include "renderer.h" @@ -21,11 +22,10 @@ Map::Map(std::string_view filename, Renderer& renderer) { 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(); - } + const tmx::Tileset& tileset = mapfile.getTilesets()[0]; + firstGID = tileset.getFirstGID(); + tilesetTextureId_ = renderer.loadImageFromFile(tileset.getImagePath()); + tilesetColumns_ = tileset.getColumnCount(); for (const auto& layer : mapfile.getLayers()) { if (layer->getType() == tmx::Layer::Type::Tile) { @@ -34,13 +34,33 @@ Map::Map(std::string_view filename, Renderer& renderer) { 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 }); + Tile tile; + tile.id = maptile.ID - firstGID; + tile.flipHorizontal = (maptile.flipFlags & tmx::TileLayer::Horizontal) != 0; + tile.flipVertical = (maptile.flipFlags & tmx::TileLayer::Vertical) != 0; + + for (const tmx::Property& property : tileset.getTile(maptile.ID)->properties) { + if (property.getName() == "solid" && property.getBoolValue()) { + tile.blocked = true; + } + } + + tilesToStore.push_back(std::move(tile)); } layers_.push_back(std::move(tilesToStore)); } } } + +bool Map::isBlocked(int x, int y) const { + int i = x + y * mapSize_.w(); + + for (const std::vector& layer : layers_) { + if (layer.at(i).blocked) { + return true; + } + } + + return false; +} -- cgit 1.4.1