#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); } } }