1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

vcmi: fix road and river loading

It actually catched by MapFormat.Terrain test crash.
So, this is a fix (functions does not trowing exceptons, it returns NULL
if something is wrong).
This commit is contained in:
Konstantin 2023-03-01 15:11:59 +03:00
parent 7ef5163d9d
commit c84a9f32f6

View File

@ -1005,27 +1005,20 @@ void CMapLoaderJson::readTerrainTile(const std::string & src, TerrainTile & tile
if (startPos >= src.size())
return;
bool hasRoad = true;
//FIXME: check without exceptions?
{//road type
const std::string typeCode = src.substr(startPos, 2);
startPos += 2;
try
tile.roadType = getRoadByCode(typeCode);
if(!tile.roadType) //it's not a road, it's a river
{
tile.roadType = getRoadByCode(typeCode);
}
catch (const std::exception&) //it's not a road, it's a river
{
try
{
tile.riverType = getRiverByCode(typeCode);
hasRoad = false;
}
catch (const std::exception&)
tile.roadType = VLC->roadTypeHandler->getById(Road::NO_ROAD);
tile.riverType = getRiverByCode(typeCode);
hasRoad = false;
if(!tile.riverType)
{
throw std::runtime_error("Invalid river type in " + src);
}
}
}
}
if (hasRoad)
{//road dir