diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-31 18:41:30 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-31 18:41:30 +0100 |
commit | 8e3367b186e60eb1e33bf58a066823cb00a7566e (patch) | |
tree | c4038a31993767276efec5fa1b1a37dff3b79465 /mwe/resource-manager/tiledMap.cpp | |
parent | b7df77d6cc26cb9ee46891d7108f01734b3104dd (diff) | |
parent | 35ef3ba91ce9e00466508f2388f4c1dd2321b505 (diff) |
Merge branch 'master' into poc/audio-miniaudio
Diffstat (limited to 'mwe/resource-manager/tiledMap.cpp')
-rw-r--r-- | mwe/resource-manager/tiledMap.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/mwe/resource-manager/tiledMap.cpp b/mwe/resource-manager/tiledMap.cpp new file mode 100644 index 0000000..836929c --- /dev/null +++ b/mwe/resource-manager/tiledMap.cpp @@ -0,0 +1,70 @@ + + +#include "tiledMap.h" +#include "TextureMap.h" +#include "map_layer.h" +#include <SDL_render.h> +#include <cassert> +#include <iostream> +#include <ostream> +#include <string> +#include <tmxlite/Layer.hpp> +#include <tmxlite/Map.hpp> + +TiledMap::TiledMap(const std::string & content) { + if (m_TmxMap.loadFromString(content, "../../asset/tiled/")) { + std::cout << "Map loaded correctly " << std::endl; + } +} + +TiledMap::~TiledMap() { + for (const auto & r : m_MapTextures) { + delete r; + } + m_MapTextures.clear(); + + for (const auto & m : m_RenderLayers) { + delete m; + } + m_RenderLayers.clear(); +} + +void TiledMap::SetRenderer(SDL_Renderer & renderer) { + this->m_Renderer = &renderer; + this->SetMapTextures(); + this->SetMapLayers(); +} + +void TiledMap::draw() const { + for (const auto & l : m_RenderLayers) { + l->draw(m_Renderer); + } +} + +void TiledMap::SetMapTextures() { + const auto & tileSets = m_TmxMap.getTilesets(); + assert(~tileSets.empty()); + + std::cout << "Processing SetMapTextures " << std::endl; + + for (const auto & ts : tileSets) { + m_MapTextures.emplace_back(new TextureMap); + if (!m_MapTextures.back()->loadFromFile(ts.getImagePath(), + m_Renderer)) { + std::cerr << "Failed opening " << ts.getImagePath() << "\n"; + } + } +} + +void TiledMap::SetMapLayers() { + const auto & mapLayers = m_TmxMap.getLayers(); + + std::cout << "Processing SetMapLayers " << std::endl; + for (auto i = 0u; i < mapLayers.size(); ++i) { + if (mapLayers[i]->getType() == tmx::Layer::Type::Tile) { + m_RenderLayers.emplace_back(new MapLayer); + m_RenderLayers.back()->create(this->m_TmxMap, i, + this->m_MapTextures); + } + } +} |