1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-25 21:38:59 +02:00

Handle "bannedTowns" (alredy used on Jebus).

This commit is contained in:
Tomasz Zieliński 2023-07-02 11:41:47 +02:00
parent cb4d818241
commit 73b78dd75e
2 changed files with 13 additions and 3 deletions

@ -205,9 +205,17 @@ std::set<FactionID> ZoneOptions::getDefaultTownTypes() const
return defaultTowns;
}
const std::set<FactionID> & ZoneOptions::getTownTypes() const
const std::set<FactionID> ZoneOptions::getTownTypes() const
{
return townTypes;
if (townTypes.empty())
{
//Assume that all towns are allowed, unless banned
return vstd::difference(getDefaultTownTypes(), bannedTownTypes);
}
else
{
return vstd::difference(townTypes, bannedTownTypes);
}
}
void ZoneOptions::setTownTypes(const std::set<FactionID> & value)
@ -376,6 +384,7 @@ void ZoneOptions::serializeJson(JsonSerializeFormat & handler)
handler.serializeBool("townsAreSameType", townsAreSameType, false);
handler.serializeIdArray<FactionID, FactionID>("allowedMonsters", monsterTypes, std::set<FactionID>());
handler.serializeIdArray<FactionID, FactionID>("allowedTowns", townTypes, std::set<FactionID>());
handler.serializeIdArray<FactionID, FactionID>("bannedTowns", bannedTownTypes, std::set<FactionID>());
{
//TODO: add support for std::map to serializeEnum

@ -145,7 +145,7 @@ public:
const CTownInfo & getPlayerTowns() const;
const CTownInfo & getNeutralTowns() const;
std::set<FactionID> getDefaultTownTypes() const;
const std::set<FactionID> & getTownTypes() const;
const std::set<FactionID> getTownTypes() const;
const std::set<FactionID> & getMonsterTypes() const;
void setTownTypes(const std::set<FactionID> & value);
@ -188,6 +188,7 @@ protected:
bool townsAreSameType;
std::set<FactionID> townTypes;
std::set<FactionID> bannedTownTypes;
std::set<FactionID> monsterTypes;
std::map<TResource, ui16> mines; //obligatory mines to spawn in this zone