mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Start implementing PlayerInfo serialisation
This commit is contained in:
parent
2f67e015e1
commit
60825fbbd3
@ -210,6 +210,17 @@ CMapLoaderJson::CMapLoaderJson(CInputOutputStream * stream):
|
||||
|
||||
}
|
||||
|
||||
si32 CMapLoaderJson::getIdentifier(const std::string& type, const std::string& name)
|
||||
{
|
||||
boost::optional<si32> res = VLC->modh->identifiers.getIdentifier("core", type, name, false);
|
||||
|
||||
if(!res)
|
||||
{
|
||||
throw new std::runtime_error("Map load failed. Identifier not resolved.");
|
||||
}
|
||||
return res.get();
|
||||
}
|
||||
|
||||
std::unique_ptr<CMap> CMapLoaderJson::loadMap()
|
||||
{
|
||||
map = new CMap();
|
||||
@ -285,16 +296,61 @@ void CMapLoaderJson::readHeader()
|
||||
// std::vector<ui16> placeholdedHeroes;
|
||||
|
||||
readTriggeredEvents(header);
|
||||
readPlayerInfo();
|
||||
readPlayerInfo(header);
|
||||
//TODO: readHeader
|
||||
}
|
||||
|
||||
void CMapLoaderJson::readPlayerInfo()
|
||||
void CMapLoaderJson::readPlayerInfo(const JsonNode & input)
|
||||
{
|
||||
//ui8 howManyTeams;
|
||||
//TODO: readPlayerInfo
|
||||
const JsonNode & src = input["players"];
|
||||
int howManyTeams = 0;
|
||||
|
||||
for(int player = 0; player < PlayerColor::PLAYER_LIMIT_I; player++)
|
||||
{
|
||||
PlayerInfo & info = map->players.at(player);
|
||||
|
||||
const JsonNode & playerSrc = src[GameConstants::PLAYER_COLOR_NAMES[player]];
|
||||
|
||||
if(playerSrc.isNull())
|
||||
{
|
||||
info.canComputerPlay = false;
|
||||
info.canHumanPlay = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
readPlayerInfo(info, playerSrc);
|
||||
vstd::amax(howManyTeams, info.team.getNum()+1);
|
||||
}
|
||||
}
|
||||
mapHeader->howManyTeams = howManyTeams;
|
||||
}
|
||||
|
||||
void CMapLoaderJson::readPlayerInfo(PlayerInfo& info, const JsonNode& input)
|
||||
{
|
||||
//allowed factions
|
||||
|
||||
info.isFactionRandom = input["randomFaction"].Bool();
|
||||
info.canComputerPlay = input["canComputerPlay"].Bool();
|
||||
info.canHumanPlay = input["canHumanPlay"].Bool();
|
||||
|
||||
//plasedHeroes
|
||||
|
||||
//mainTown
|
||||
|
||||
info.generateHeroAtMainTown = input["generateHeroAtMainTown"].Bool();
|
||||
|
||||
info.hasRandomHero = input["randomHero"].Bool();
|
||||
|
||||
//mainHero
|
||||
|
||||
//mainHeroPortrait
|
||||
|
||||
info.mainCustomHeroName = input["mainHeroName"].String();
|
||||
|
||||
info.team = TeamID(input["team"].Float());
|
||||
}
|
||||
|
||||
|
||||
void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
{
|
||||
using namespace TerrainDetail;
|
||||
@ -533,7 +589,28 @@ void CMapSaverJson::writePlayerInfo(JsonNode & output)
|
||||
|
||||
void CMapSaverJson::writePlayerInfo(const PlayerInfo & info, JsonNode & output)
|
||||
{
|
||||
//allowed factions
|
||||
|
||||
output["randomFaction"].Bool() = info.isFactionRandom;
|
||||
|
||||
output["canComputerPlay"].Bool() = info.canComputerPlay;
|
||||
output["canHumanPlay"].Bool() = info.canHumanPlay;
|
||||
|
||||
//plasedHeroes
|
||||
|
||||
//mainTown
|
||||
|
||||
output["generateHeroAtMainTown"].Bool() = info.generateHeroAtMainTown;
|
||||
|
||||
output["randomHero"].Bool() = info.hasRandomHero;
|
||||
|
||||
//mainHero
|
||||
|
||||
//mainHeroPortrait
|
||||
|
||||
output["mainHeroName"].String() = info.mainCustomHeroName;
|
||||
|
||||
output["team"].Float() = info.team.getNum();
|
||||
}
|
||||
|
||||
const std::string CMapSaverJson::writeTerrainTile(const TerrainTile & tile)
|
||||
|
@ -120,7 +120,9 @@ public:
|
||||
*/
|
||||
std::unique_ptr<CMapHeader> loadMapHeader() override;
|
||||
|
||||
private:
|
||||
private:
|
||||
si32 getIdentifier(const std::string & type, const std::string & name);
|
||||
|
||||
/**
|
||||
* Reads complete map.
|
||||
*/
|
||||
@ -134,7 +136,12 @@ private:
|
||||
/**
|
||||
* Reads player information.
|
||||
*/
|
||||
void readPlayerInfo();
|
||||
void readPlayerInfo(const JsonNode & input);
|
||||
|
||||
/**
|
||||
* Reads one player information.
|
||||
*/
|
||||
void readPlayerInfo(PlayerInfo & info, const JsonNode & input);
|
||||
|
||||
void readTerrainTile(const std::string & src, TerrainTile & tile);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user