Riyyi
10 years ago
10 changed files with 232 additions and 11 deletions
@ -0,0 +1,13 @@ |
|||||||
|
#include "map.h" |
||||||
|
|
||||||
|
Map::Map() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
Map::~Map() |
||||||
|
{ |
||||||
|
delete this->tileSet; |
||||||
|
delete this->layer1; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,80 @@ |
|||||||
|
#ifndef MAP_H |
||||||
|
#define MAP_H |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
class TileSet |
||||||
|
{ |
||||||
|
public: |
||||||
|
//TileSet();
|
||||||
|
//~TileSet();
|
||||||
|
|
||||||
|
// "firstgid":1,
|
||||||
|
std::string image; |
||||||
|
int imageHeight; |
||||||
|
int imageWidth; |
||||||
|
// "margin":0,
|
||||||
|
// "name":"Tilesheet",
|
||||||
|
// "properties":
|
||||||
|
// {
|
||||||
|
|
||||||
|
// },
|
||||||
|
// "spacing":0,
|
||||||
|
int tileHeight; |
||||||
|
int tileWidth; |
||||||
|
// "transparentcolor":"#ffffff"
|
||||||
|
// @Todo save all tile textures with pointers
|
||||||
|
// map->tileSet.tile[1];
|
||||||
|
std::vector<int> tile; |
||||||
|
}; |
||||||
|
|
||||||
|
class Layer |
||||||
|
{ |
||||||
|
public: |
||||||
|
//Layer();
|
||||||
|
//~Layer();
|
||||||
|
|
||||||
|
std::vector<std::vector<int>> data; |
||||||
|
int height; |
||||||
|
// name
|
||||||
|
// opacity
|
||||||
|
// type
|
||||||
|
bool visible; |
||||||
|
int width; |
||||||
|
int x; |
||||||
|
int y; |
||||||
|
}; |
||||||
|
|
||||||
|
class Map |
||||||
|
{ |
||||||
|
public: |
||||||
|
Map(); |
||||||
|
~Map(); |
||||||
|
|
||||||
|
// Global
|
||||||
|
int height; |
||||||
|
Layer* layer1; |
||||||
|
// "nextobjectid":1,
|
||||||
|
// "orientation":"orthogonal",
|
||||||
|
// "properties":
|
||||||
|
// {
|
||||||
|
|
||||||
|
// },
|
||||||
|
// "renderorder":"right-down",
|
||||||
|
int tileheight; |
||||||
|
TileSet* tileSet; |
||||||
|
int tilewidth; |
||||||
|
// "version":1,
|
||||||
|
int width; |
||||||
|
}; |
||||||
|
|
||||||
|
//sf::Sprite* sprite;
|
||||||
|
//for()
|
||||||
|
//{
|
||||||
|
// Sprite sf::Texture = tile.texture
|
||||||
|
// sprire->setPosition(sf:vector2i); 5 * 32, 4 * 32
|
||||||
|
// window->draw(*sprite);
|
||||||
|
//}
|
||||||
|
|
||||||
|
#endif // MAP_H
|
@ -0,0 +1,93 @@ |
|||||||
|
#include "mapload.h" |
||||||
|
|
||||||
|
MapLoad::MapLoad() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
MapLoad::~MapLoad() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void MapLoad::GetFile(std::string* content, std::string mapName) { |
||||||
|
// Get the content of the map file and append it to content
|
||||||
|
std::ifstream openFile(mapName); |
||||||
|
if (openFile.is_open()) |
||||||
|
{ |
||||||
|
std::string ifStream; |
||||||
|
while (!openFile.eof()) |
||||||
|
{ |
||||||
|
openFile >> ifStream; |
||||||
|
|
||||||
|
*content += ifStream; |
||||||
|
} |
||||||
|
|
||||||
|
openFile.close(); |
||||||
|
} |
||||||
|
else { |
||||||
|
std::cout << "MapLoad:GetFile | Couldn't open file: " << mapName << std::endl; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void MapLoad::Parser(std::string* content, Map* map) { |
||||||
|
// 1. Parse a JSON string into DOM.
|
||||||
|
rapidjson::Document document; |
||||||
|
document.Parse(content->c_str()); |
||||||
|
|
||||||
|
// Process map
|
||||||
|
// TILESET
|
||||||
|
TileSet* tileSet = new TileSet(); |
||||||
|
tileSet->image = document["tilesets"][0]["image"].GetString(); |
||||||
|
tileSet->imageHeight = document["tilesets"][0]["imageheight"].GetInt(); |
||||||
|
tileSet->imageWidth = document["tilesets"][0]["imagewidth"].GetInt(); |
||||||
|
tileSet->tileHeight = document["tilesets"][0]["tileheight"].GetInt(); |
||||||
|
tileSet->tileWidth = document["tilesets"][0]["tilewidth"].GetInt(); |
||||||
|
|
||||||
|
int height = document["layers"][0]["height"].GetInt(); |
||||||
|
int width = document["layers"][0]["width"].GetInt(); |
||||||
|
|
||||||
|
// LAYER 1
|
||||||
|
Layer* layer = new Layer(); |
||||||
|
|
||||||
|
const rapidjson::Value& mapArray = document["layers"][0]["data"]; |
||||||
|
assert(mapArray.IsArray()); |
||||||
|
|
||||||
|
int y = 0; |
||||||
|
for (int i = 0; i < height; i++) { |
||||||
|
std::vector<int> row; |
||||||
|
|
||||||
|
for (int j = 0; j < width; j++) { |
||||||
|
row.push_back(mapArray[y].GetInt()); |
||||||
|
y++; |
||||||
|
} |
||||||
|
|
||||||
|
layer->data.push_back(row); |
||||||
|
} |
||||||
|
|
||||||
|
layer->height = height; |
||||||
|
layer->visible = document["layers"][0]["visible"].GetBool(); |
||||||
|
layer->width = width; |
||||||
|
layer->x = document["layers"][0]["x"].GetInt(); |
||||||
|
layer->y = document["layers"][0]["y"].GetInt(); |
||||||
|
|
||||||
|
// MAP
|
||||||
|
map->height = document["layers"][0]["height"].GetInt(); |
||||||
|
map->layer1 = layer; |
||||||
|
map->tileheight = document["tileheight"].GetInt(); |
||||||
|
map->tileSet = tileSet; |
||||||
|
map->tilewidth = document["tilewidth"].GetInt(); |
||||||
|
map->width = document["layers"][0]["width"].GetInt(); |
||||||
|
|
||||||
|
// for (int i = 0; i < map->data1.size(); i++) {
|
||||||
|
// for (int j = 0; j < width; j++) {
|
||||||
|
// std::cout << map->data1[i][j] << std::endl;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
void MapLoad::Load(Map* map, std::string mapName) { |
||||||
|
std::string content; |
||||||
|
GetFile(&content, mapName); |
||||||
|
Parser(&content, map); |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
#ifndef MAPLOAD_H |
||||||
|
#define MAPLOAD_H |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <rapidjson/document.h> |
||||||
|
|
||||||
|
#include "map.h" |
||||||
|
|
||||||
|
class MapLoad |
||||||
|
{ |
||||||
|
public: |
||||||
|
MapLoad(); |
||||||
|
~MapLoad(); |
||||||
|
|
||||||
|
void GetFile(std::string* content, std::string mapName); |
||||||
|
void Parser(std::string* content, Map* map); |
||||||
|
void Load(Map* map, std::string mapName); |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // MAPLOAD_H
|
Loading…
Reference in new issue