Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "maker.h"
- bool MapMaker::load(std::string filename, std::list<Object *> &objects) {
- Json::Value root;
- Json::Reader reader;
- std::ifstream file(filename);
- bool parsingSuccessful = reader.parse(file, root);
- if(!parsingSuccessful)
- return false;
- TileSize tileSize;
- tileSize.x = root["tilesets"][0u]["tilewidth"].asInt();
- tileSize.y = root["tilesets"][0u]["tileheight"].asInt();
- tileSize.s = root["tilesets"][0u]["spacing"].asInt();
- for(Json::Value &layer: root["layers"]) {
- if(layer["name"].asString() != "objects")
- loadLayer(layer, objects, tileSize);
- else
- loadObjects(root, layer, objects, tileSize);
- }
- sf::Texture *tileset = new sf::Texture();
- tileset->loadFromFile("resources/maps/" + root["tilesets"][0u]["image"].asString());
- for(Object *object: objects) {
- object->texture = tileset;
- }
- return true;
- }
- void MapMaker::loadLayer(Json::Value &layer, std::list<Object *> &objects, TileSize tileSize) {
- MapLayer *tmp = new MapLayer(tileSize);
- tmp->width = layer["width"].asInt();
- tmp->height = layer["height"].asInt();
- memset(tmp->tileMap, 0, sizeof(tmp->tileMap));
- for(size_t i = 0; i < layer["data"].size(); ++i)
- tmp->tileMap[i] = layer["data"][(int)i].asInt();
- tmp->isCollisionLayer = layer["properties"]["Collision"].asBool();
- tmp->isDestructibleLayer = layer["properties"]["Destructible"].asBool();
- objects.push_back(tmp);
- }
- void MapMaker::loadObjects(Json::Value &root, Json::Value &layer, std::list<Object *> &objects, TileSize tileSize) {
- for(Json::Value &object: layer["objects"]) {
- Sprite *sprite = new Sprite(tileSize);
- sprite->x = object["x"].asInt();
- sprite->y = object["y"].asInt();
- sprite->id = object["gid"].asInt();
- Json::Value &tileInfo = root["tilesets"][0u]["tiles"][std::to_string(sprite->id - 1)];
- sprite->frame = 0;
- sprite->frameCount = tileInfo["animation"].size();
- sprite->frameDuration = tileInfo["animation"][0u]["duration"].asInt();
- objects.push_back(sprite);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement