bool Map::dumpMap(string filename) { PositionI dimensions=layers_.at(0).getDimensions(); ofstream NewMapData(filename.c_str(),ofstream::binary); NewMapData.put((char)dimensions.X); NewMapData.put((char)dimensions.Y); NewMapData.write(scriptFile_.c_str(),scriptFile_.size()); NewMapData.put((char)3); NewMapData.put((char)tileSetNames_.size()); for (int i=0;i<tileSetNames_.size();i++) { NewMapData.write(tileSetNames_.at(i).c_str(),tileSetNames_.at(i).size()); NewMapData.put((char)3); }; //Layer for (int Layer=0;Layer<getNumberOfLayers();Layer++) { for (int i=0;i<dimensions.X*dimensions.Y;i++) { Tile saveTile=getTile(i-i/dimensions.X*dimensions.X,i/dimensions.X,Layer); NewMapData.put((char)saveTile.TileSet); NewMapData.put((char)saveTile.Type); NewMapData.put((char)saveTile.Passability); }; NewMapData.put('|'); }; return true; };
static int yp_yajl_map_key(void *o, const unsigned char * key, unsigned int keyLen) { JsonParserCtx *ctx = static_cast<JsonParserCtx*>(o); MapArrayNestingChain *head = jp_nesting_chain_head_get(ctx, JsonTypeMap); if (!head) return CANCEL_PARSE; JsonElMap *map = (JsonElMap*)head->el; JsonElMapData *mapData = NewMapData(key, keyLen); mapData->next = map->firstVal; map->firstVal = mapData; return CONTINUE_PARSE; }
bool Map::loadMap(string filename) { ifstream NewMapData(filename.c_str(),ifstream::binary); if (NewMapData==NULL) { return false; }; PositionI dimensions; dimensions.X=NewMapData.get(); dimensions.Y=NewMapData.get(); scriptFile_=loadString(&NewMapData,(char)3); tileSetNames_.resize(NewMapData.get()); for (int TileSetsNum=0;TileSetsNum<tileSetNames_.size();TileSetsNum++) { tileSetNames_.at(TileSetsNum)=loadString(&NewMapData,(char)3); }; string LayerString=loadString(&NewMapData,"|"); do { TileLayer newLayer(dimensions.X,dimensions.Y); for (int FillMap=0;FillMap<dimensions.X*dimensions.Y;FillMap++) { Tile newTile; newTile.TileSet=(int)nextChar(&LayerString); newTile.Type=(TileType)nextChar(&LayerString); newTile.Passability=(int)nextChar(&LayerString); newLayer.changeTile(FillMap-FillMap/dimensions.X*dimensions.X,FillMap/dimensions.X,newTile); }; addLayer(newLayer); string LayerString=loadString(&NewMapData,'|'); } while (LayerString!=""); CONSOLE_WRITE("Map Scripts"); CONSOLE_WRITE("==========="); CONSOLE_RUN_FILE("Maps/"+scriptFile_); CONSOLE_WRITE("==========="); return true; };