diff options
Diffstat (limited to 'resource-manager/tiledMap.cpp')
| -rw-r--r-- | resource-manager/tiledMap.cpp | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/resource-manager/tiledMap.cpp b/resource-manager/tiledMap.cpp new file mode 100644 index 0000000..659c1fa --- /dev/null +++ b/resource-manager/tiledMap.cpp @@ -0,0 +1,72 @@ + + + + +#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); +		} +	} +} |