mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-15 20:03:15 +02:00
Add "bannedTerrains", "bannedMonsters" options for templates.
This commit is contained in:
@@ -65,6 +65,7 @@ void CTreasureInfo::serializeJson(JsonSerializeFormat & handler)
|
|||||||
namespace rmg
|
namespace rmg
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//FIXME: This is never used, instead TerrainID is used
|
||||||
class TerrainEncoder
|
class TerrainEncoder
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -184,16 +185,36 @@ std::optional<int> ZoneOptions::getOwner() const
|
|||||||
return owner;
|
return owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::set<TerrainId> & ZoneOptions::getTerrainTypes() const
|
const std::set<TerrainId> ZoneOptions::getTerrainTypes() const
|
||||||
|
{
|
||||||
|
if (terrainTypes.empty())
|
||||||
|
{
|
||||||
|
return vstd::difference(getDefaultTerrainTypes(), bannedTerrains);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return terrainTypes;
|
return terrainTypes;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ZoneOptions::setTerrainTypes(const std::set<TerrainId> & value)
|
void ZoneOptions::setTerrainTypes(const std::set<TerrainId> & value)
|
||||||
{
|
{
|
||||||
terrainTypes = value;
|
terrainTypes = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::set<TerrainId> ZoneOptions::getDefaultTerrainTypes() const
|
||||||
|
{
|
||||||
|
std::set<TerrainId> terrains;
|
||||||
|
for (auto terrain : VLC->terrainTypeHandler->objects)
|
||||||
|
{
|
||||||
|
if (terrain->isLand() && terrain->isPassable())
|
||||||
|
{
|
||||||
|
terrains.insert(terrain->getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return terrains;
|
||||||
|
}
|
||||||
|
|
||||||
std::set<FactionID> ZoneOptions::getDefaultTownTypes() const
|
std::set<FactionID> ZoneOptions::getDefaultTownTypes() const
|
||||||
{
|
{
|
||||||
std::set<FactionID> defaultTowns;
|
std::set<FactionID> defaultTowns;
|
||||||
@@ -228,9 +249,9 @@ void ZoneOptions::setMonsterTypes(const std::set<FactionID> & value)
|
|||||||
monsterTypes = value;
|
monsterTypes = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::set<FactionID> & ZoneOptions::getMonsterTypes() const
|
const std::set<FactionID> ZoneOptions::getMonsterTypes() const
|
||||||
{
|
{
|
||||||
return monsterTypes;
|
return vstd::difference(monsterTypes, bannedMonsters);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneOptions::setMinesInfo(const std::map<TResource, ui16> & value)
|
void ZoneOptions::setMinesInfo(const std::map<TResource, ui16> & value)
|
||||||
@@ -354,10 +375,12 @@ void ZoneOptions::serializeJson(JsonSerializeFormat & handler)
|
|||||||
if(terrainTypeLikeZone == NO_ZONE)
|
if(terrainTypeLikeZone == NO_ZONE)
|
||||||
{
|
{
|
||||||
handler.serializeIdArray<TerrainId, TerrainID>("terrainTypes", terrainTypes, std::set<TerrainId>());
|
handler.serializeIdArray<TerrainId, TerrainID>("terrainTypes", terrainTypes, std::set<TerrainId>());
|
||||||
|
handler.serializeIdArray<TerrainId, TerrainID>("bannedTerrains", bannedTerrains, std::set<TerrainId>());
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.serializeBool("townsAreSameType", townsAreSameType, false);
|
handler.serializeBool("townsAreSameType", townsAreSameType, false);
|
||||||
handler.serializeIdArray<FactionID>("allowedMonsters", monsterTypes, std::set<FactionID>());
|
handler.serializeIdArray<FactionID>("allowedMonsters", monsterTypes, std::set<FactionID>());
|
||||||
|
handler.serializeIdArray<FactionID>("bannedMonsters", bannedMonsters, std::set<FactionID>());
|
||||||
handler.serializeIdArray<FactionID>("allowedTowns", townTypes, std::set<FactionID>());
|
handler.serializeIdArray<FactionID>("allowedTowns", townTypes, std::set<FactionID>());
|
||||||
handler.serializeIdArray<FactionID>("bannedTowns", bannedTownTypes, std::set<FactionID>());
|
handler.serializeIdArray<FactionID>("bannedTowns", bannedTownTypes, std::set<FactionID>());
|
||||||
|
|
||||||
@@ -727,6 +750,7 @@ std::set<TerrainId> CRmgTemplate::inheritTerrainType(std::shared_ptr<ZoneOptions
|
|||||||
const auto otherZone = zones.at(zone->getTerrainTypeLikeZone());
|
const auto otherZone = zones.at(zone->getTerrainTypeLikeZone());
|
||||||
zone->setTerrainTypes(inheritTerrainType(otherZone, iteration));
|
zone->setTerrainTypes(inheritTerrainType(otherZone, iteration));
|
||||||
}
|
}
|
||||||
|
//This implicitely excludes banned terrains
|
||||||
return zone->getTerrainTypes();
|
return zone->getTerrainTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -139,14 +139,15 @@ public:
|
|||||||
void setSize(int value);
|
void setSize(int value);
|
||||||
std::optional<int> getOwner() const;
|
std::optional<int> getOwner() const;
|
||||||
|
|
||||||
const std::set<TerrainId> & getTerrainTypes() const;
|
const std::set<TerrainId> getTerrainTypes() const;
|
||||||
void setTerrainTypes(const std::set<TerrainId> & value);
|
void setTerrainTypes(const std::set<TerrainId> & value);
|
||||||
|
std::set<TerrainId> getDefaultTerrainTypes() const;
|
||||||
|
|
||||||
const CTownInfo & getPlayerTowns() const;
|
const CTownInfo & getPlayerTowns() const;
|
||||||
const CTownInfo & getNeutralTowns() const;
|
const CTownInfo & getNeutralTowns() const;
|
||||||
std::set<FactionID> getDefaultTownTypes() const;
|
std::set<FactionID> getDefaultTownTypes() const;
|
||||||
const std::set<FactionID> getTownTypes() const;
|
const std::set<FactionID> getTownTypes() const;
|
||||||
const std::set<FactionID> & getMonsterTypes() const;
|
const std::set<FactionID> getMonsterTypes() const;
|
||||||
|
|
||||||
void setTownTypes(const std::set<FactionID> & value);
|
void setTownTypes(const std::set<FactionID> & value);
|
||||||
void setMonsterTypes(const std::set<FactionID> & value);
|
void setMonsterTypes(const std::set<FactionID> & value);
|
||||||
@@ -185,11 +186,13 @@ protected:
|
|||||||
CTownInfo neutralTowns;
|
CTownInfo neutralTowns;
|
||||||
bool matchTerrainToTown;
|
bool matchTerrainToTown;
|
||||||
std::set<TerrainId> terrainTypes;
|
std::set<TerrainId> terrainTypes;
|
||||||
|
std::set<TerrainId> bannedTerrains;
|
||||||
bool townsAreSameType;
|
bool townsAreSameType;
|
||||||
|
|
||||||
std::set<FactionID> townTypes;
|
std::set<FactionID> townTypes;
|
||||||
std::set<FactionID> bannedTownTypes;
|
std::set<FactionID> bannedTownTypes;
|
||||||
std::set<FactionID> monsterTypes;
|
std::set<FactionID> monsterTypes;
|
||||||
|
std::set<FactionID> bannedMonsters;
|
||||||
|
|
||||||
std::map<TResource, ui16> mines; //obligatory mines to spawn in this zone
|
std::map<TResource, ui16> mines; //obligatory mines to spawn in this zone
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user