From 3ecf5bbc1c81908bfd3355999a37e8e96e15b8b5 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Mon, 22 Feb 2021 22:46:44 -0500 Subject: Generalized upper/lower layer map rendering Map layers can have a flag on them that specifies that they should be rendered as part of the upper set (rendered above the normal sprite layer but below the above sprite layer). Also added map connections between hallucination_interior and hallucination_cliff. And named the layers in the map files bc why not. --- src/map.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index d7c1e7e..4781231 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -50,7 +50,18 @@ Map::Map(std::string_view name) : name_(name) { tilesToStore.push_back(std::move(tile)); } - layers_.push_back(std::move(tilesToStore)); + bool above = false; + for (const tmx::Property& property : tileLayer.getProperties()) { + if (property.getName() == "above" && property.getBoolValue()) { + above = true; + } + } + + if (above) { + upperLayers_.push_back(std::move(tilesToStore)); + } else { + lowerLayers_.push_back(std::move(tilesToStore)); + } } else if (layer->getType() == tmx::Layer::Type::Object) { const auto& objectLayer = layer->getLayerAs(); @@ -137,9 +148,13 @@ Map::Map(std::string_view name) : name_(name) { } bool Map::isBlocked(int x, int y) const { + if (x < 0 || y < 0 || x >= mapSize_.w() || y >= mapSize_.h()) { + return false; + } + int i = x + y * mapSize_.w(); - for (const std::vector& layer : layers_) { + for (const std::vector& layer : lowerLayers_) { if (layer.at(i).blocked) { return true; } @@ -149,9 +164,13 @@ bool Map::isBlocked(int x, int y) const { } StepType Map::getStepType(int x, int y) const { + if (x < 0 || y < 0 || x >= mapSize_.w() || y >= mapSize_.h()) { + return StepType::none; + } + int i = x + y * mapSize_.w(); - for (const std::vector& layer : layers_) { + for (const std::vector& layer : lowerLayers_) { if (layer.at(i).step != StepType::none) { return layer.at(i).step; } -- cgit 1.4.1