1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00

Fixed game startup

This commit is contained in:
Ivan Savenko
2022-12-20 20:26:54 +02:00
parent e1799379dd
commit 2de3178158
9 changed files with 50 additions and 42 deletions

View File

@@ -165,14 +165,7 @@ void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
}
//assuming that object can be placed on other land terrains
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(ETerrainId::WATER))
{
for(const auto & terrain : VLC->terrainTypeHandler->objects)
{
if(terrain->isLand() && terrain->isPassable())
allowedTerrains.insert(terrain->id);
}
}
anyTerrain = allowedTerrains.size() >= 8 && !allowedTerrains.count(ETerrainId::WATER);
id = Obj(boost::lexical_cast<int>(strings[5]));
subid = boost::lexical_cast<int>(strings[6]);
@@ -238,14 +231,7 @@ void ObjectTemplate::readMap(CBinaryReader & reader)
}
//assuming that object can be placed on other land terrains
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(ETerrainId::WATER))
{
for(const auto & terrain : VLC->terrainTypeHandler->objects)
{
if(terrain->isLand() && terrain->isPassable())
allowedTerrains.insert(terrain->id);
}
}
anyTerrain = allowedTerrains.size() >= 8 && !allowedTerrains.count(ETerrainId::WATER);
id = Obj(reader.readUInt32());
subid = reader.readUInt32();
@@ -292,15 +278,11 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
allowedTerrains.insert(TerrainId(identifier));
});
}
anyTerrain = false;
}
else
{
for(const auto & terrain : VLC->terrainTypeHandler->objects)
{
if(!terrain->isPassable() || terrain->isWater())
continue;
allowedTerrains.insert(terrain->id);
}
anyTerrain = true;
}
if(withTerrain && allowedTerrains.empty())
@@ -561,9 +543,14 @@ void ObjectTemplate::calculateVisitableOffset()
visitableOffset = int3(0, 0, 0);
}
bool ObjectTemplate::canBePlacedAt(TerrainId terrain) const
bool ObjectTemplate::canBePlacedAt(TerrainId terrainID) const
{
return vstd::contains(allowedTerrains, terrain);
if (anyTerrain)
{
auto const & terrain = VLC->terrainTypeHandler->getById(terrainID);
return terrain->isLand() && terrain->isPassable();
}
return vstd::contains(allowedTerrains, terrainID);
}
void ObjectTemplate::recalculate()