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