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

First version that compiles

This commit is contained in:
Tomasz Zieliński
2022-09-21 11:34:23 +02:00
parent b20f649521
commit 494b0f0226
93 changed files with 431 additions and 359 deletions

View File

@@ -155,20 +155,20 @@ void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
// so these two fields can be interpreted as "strong affinity" and "weak affinity" towards terrains
std::string & terrStr = strings[4]; // allowed terrains, 1 = object can be placed on this terrain
assert(terrStr.size() == 9); // all terrains but rock
for(size_t i = 0; i < 9; i++)
assert(terrStr.size() == Terrain::ROCK - 1); // all terrains but rock
for(TTerrain i = Terrain::FIRST_REGULAR_TERRAIN; i < Terrain::ROCK; i++)
{
if (terrStr[8-i] == '1')
allowedTerrains.insert(Terrain::createTerrainTypeH3M(i));
allowedTerrains.insert(i);
}
//assuming that object can be placed on other land terrains
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(Terrain("water")))
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(Terrain::WATER))
{
for(auto & terrain : VLC->terrainTypeHandler::terrains())
for(const auto * terrain : VLC->terrainTypeHandler->terrains())
{
if(terrain.isLand() && terrain.isPassable())
allowedTerrains.insert(terrain);
if(terrain->isLand() && terrain->isPassable())
allowedTerrains.insert(terrain->id);
}
}
@@ -229,19 +229,19 @@ void ObjectTemplate::readMap(CBinaryReader & reader)
reader.readUInt16();
ui16 terrMask = reader.readUInt16();
for(size_t i = 0; i < 9; i++)
for(size_t i = Terrain::FIRST_REGULAR_TERRAIN; i < Terrain::ROCK; i++)
{
if (((terrMask >> i) & 1 ) != 0)
allowedTerrains.insert(Terrain::createTerrainTypeH3M(i));
allowedTerrains.insert(i);
}
//assuming that object can be placed on other land terrains
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(Terrain("water")))
if(allowedTerrains.size() >= 8 && !allowedTerrains.count(Terrain::WATER))
{
for(auto & terrain : VLC->terrainTypeHandler::terrains())
for(const auto * terrain : VLC->terrainTypeHandler->terrains())
{
if(terrain.isLand() && terrain.isPassable())
allowedTerrains.insert(terrain);
if(terrain->isLand() && terrain->isPassable())
allowedTerrains.insert(terrain->id);
}
}
@@ -285,15 +285,15 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
if(withTerrain && !node["allowedTerrains"].isNull())
{
for (auto & entry : node["allowedTerrains"].Vector())
allowedTerrains.insert(entry.String());
allowedTerrains.insert(VLC->terrainTypeHandler->getInfoByName(entry.String())->id);
}
else
{
for(auto & i : VLC->terrainTypeHandler::terrains())
for(const auto * terrain : VLC->terrainTypeHandler->terrains())
{
if(!i.isPassable() || i.isWater())
if(!terrain->isPassable() || terrain->isWater())
continue;
allowedTerrains.insert(i);
allowedTerrains.insert(terrain->id);
}
}
@@ -369,7 +369,7 @@ void ObjectTemplate::writeJson(JsonNode & node, const bool withTerrain) const
if(withTerrain)
{
//assumed that ROCK and WATER terrains are not included
if(allowedTerrains.size() < (VLC->terrainTypeHandler::terrains().size() - 2))
if(allowedTerrains.size() < (VLC->terrainTypeHandler->terrains().size() - 2))
{
JsonVector & data = node["allowedTerrains"].Vector();
@@ -556,9 +556,9 @@ void ObjectTemplate::calculateVisitableOffset()
visitableOffset = int3(0, 0, 0);
}
bool ObjectTemplate::canBePlacedAt(Terrain terrain) const
bool ObjectTemplate::canBePlacedAt(TTerrain terrain) const
{
return allowedTerrains.count(terrain) != 0;
return vstd::contains(allowedTerrains, terrain);
}
void ObjectTemplate::recalculate()