1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00
vcmi/lib/mapping/MapFormatJson.h
Ivan Savenko 7e02f6b670 Support for overriding victory/defeat conditions from h3m map or
campaign:
- new file MapFormatJson that implements small subset of Json map
format, as described on wiki
- vcmi will read overrides from file config/mapOverrides.json (currently
empty)
- Json writer for logical expressions

TODO: write data for map overrides
2013-12-30 23:09:58 +00:00

92 lines
1.8 KiB
C++

/*
* MapFormatH3M.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include "CMapService.h"
#include "../JsonNode.h"
class TriggeredEvent;
class DLL_LINKAGE CMapLoaderJson : public IMapPatcher
{
public:
/**
* Default constructor.
*
* @param stream a stream containing the map data
*/
CMapLoaderJson(JsonNode stream);
/**
* Loads the VCMI/Json map file.
*
* @return a unique ptr of the loaded map class
*/
std::unique_ptr<CMap> loadMap();
/**
* Loads the VCMI/Json map header.
*
* @return a unique ptr of the loaded map header class
*/
std::unique_ptr<CMapHeader> loadMapHeader();
/**
* Modifies supplied map header using Json data
*
*/
void patchMapHeader(std::unique_ptr<CMapHeader> & header);
private:
/**
* Reads complete map.
*/
void readMap();
/**
* Reads the map header.
*/
void readHeader();
/**
* Reads subset of header that can be replaced by patching.
*/
void readPatchData();
/**
* Reads player information.
*/
void readPlayerInfo();
/**
* Reads triggered events, including victory/loss conditions
*/
void readTriggeredEvents();
/**
* Reads one of triggered events
*/
void readTriggeredEvent(TriggeredEvent & event, const JsonNode & source);
/** ptr to the map object which gets filled by data from the buffer */
CMap * map;
/**
* ptr to the map header object which gets filled by data from the buffer.
* (when loading map and mapHeader point to the same object)
*/
std::unique_ptr<CMapHeader> mapHeader;
const JsonNode input;
};