tilemap.cpp:
Код: Выделить всё
#include "header/tilemap.hpp"
#include
void splitCoord(const std::string& coord, float& posX, float& posY) {
size_t virgola = coord.find(',');
assert(virgola != std::string::npos && "Coordinata non valida, manca la virgola");
posX = std::stof(coord.substr(0, virgola));
posY = std::stof(coord.substr(virgola + 1));
}
TileMap::TileMap() : fileStream("assets/tilemap/tiles.json") {
assert(fileStream.is_open() && "Impossibile caricare i dati della tilemap");
datiJson = nlohmann::json::parse(fileStream);
tiles.clear();
for (const auto& tileJson : datiJson) {
assert(tileJson.contains("file") && "Impossibile trovare il campo 'file' nel json");
assert(tileJson.contains("coord") && "Impossibile trovare il campo 'coord' nel file json");
Tile tile;
tile.file = tileJson["file"].get();
tile.coord = tileJson["coord"].get();
splitCoord(tile.coord, tile.posX, tile.posY);
if (!tile.texture.loadFromFile(tile.file)) {
assert(false && "Impossibile caricare la texture del tile");
}
tile.sprite = std::make_unique();
tile.sprite->setTexture(tile.texture);
tile.sprite->setPosition({tile.posX, tile.posY });
tiles.push_back(std::move(tile));
}
}
< /code>
tilemap.hpp:
#pragma once
#include
#include
#include
#include
#include
#include
#include
struct Tile {
std::string file;
std::string coord;
sf::Texture texture;
std::unique_ptr sprite;
float posX = 0;
float posY = 0;
};
class TileMap {
private:
std::ifstream fileStream;
nlohmann::json datiJson;
public:
std::vector tiles;
TileMap();
};
< /code>
game.cpp (где я называю Tilemap): < /p>
#include
#include "header/assets.hpp"
#include "header/utils.hpp"
#include "header/tilemap.hpp"
void avviaGioco(sf::RenderWindow& finestra) {
finestra.setSize(sf::Vector2u(1280, 720));
Utils::centraFinestra(finestra, sf::VideoMode({1280, 720}));
TileMap tilemap;
while (finestra.isOpen()) {
while (const std::optional event = finestra.pollEvent()) {
if (event->is()) {
finestra.close();
}
}
finestra.clear();
for (const auto& tile : tilemap.tiles) {
if (tile.sprite)
finestra.draw(*tile.sprite);
}
finestra.display();
}
}
< /code>
tiles.json (пример): < /p>
[
{
"file": "assets/tilemap/tile_00.png",
"coord": "100,100"
}
]
Подробнее здесь: https://stackoverflow.com/questions/796 ... of-sprites