1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

Rename town building types to more clear names

This commit is contained in:
Ivan Savenko
2024-08-16 14:49:42 +00:00
parent abfb467f68
commit 2f3f3c21df
9 changed files with 111 additions and 159 deletions

View File

@@ -10,7 +10,8 @@
#include "StdInc.h"
#include "CGTownInstance.h"
#include "CGTownBuilding.h"
#include "TownBuildingInstance.h"
#include "../spells/CSpellHandler.h"
#include "../bonuses/Bonus.h"
#include "../battle/IBattleInfoCallback.h"
@@ -59,13 +60,13 @@ void CGTownInstance::setPropertyDer(ObjProperty what, ObjPropertyID identifier)
switch (what)
{
case ObjProperty::STRUCTURE_ADD_VISITING_HERO:
bonusingBuildings[identifier.getNum()]->setProperty(ObjProperty::VISITORS, visitingHero->id);
rewardableBuildings.at(identifier.getNum())->setProperty(ObjProperty::VISITORS, visitingHero->id);
break;
case ObjProperty::STRUCTURE_CLEAR_VISITORS:
bonusingBuildings[identifier.getNum()]->setProperty(ObjProperty::STRUCTURE_CLEAR_VISITORS, NumericID(0));
rewardableBuildings.at(identifier.getNum())->setProperty(ObjProperty::STRUCTURE_CLEAR_VISITORS, NumericID(0));
break;
case ObjProperty::STRUCTURE_ADD_GARRISONED_HERO: //add garrisoned hero to visitors
bonusingBuildings[identifier.getNum()]->setProperty(ObjProperty::VISITORS, garrisonHero->id);
rewardableBuildings.at(identifier.getNum())->setProperty(ObjProperty::VISITORS, garrisonHero->id);
break;
case ObjProperty::BONUS_VALUE_FIRST:
bonusValue.first = identifier.getNum();
@@ -254,8 +255,8 @@ CGTownInstance::CGTownInstance(IGameCallback *cb):
CGTownInstance::~CGTownInstance()
{
for (auto & elem : bonusingBuildings)
delete elem;
for (auto & elem : rewardableBuildings)
delete elem.second;
}
int CGTownInstance::spellsAtLevel(int level, bool checkGuild) const
@@ -283,8 +284,8 @@ void CGTownInstance::setOwner(const PlayerColor & player) const
void CGTownInstance::blockingDialogAnswered(const CGHeroInstance *hero, int32_t answer) const
{
for (auto building : bonusingBuildings)
building->blockingDialogAnswered(hero, answer);
for (auto building : rewardableBuildings)
building.second->blockingDialogAnswered(hero, answer); // FIXME: why call for every building?
}
void CGTownInstance::onHeroVisit(const CGHeroInstance * h) const
@@ -369,23 +370,12 @@ bool CGTownInstance::townEnvisagesBuilding(BuildingSubID::EBuildingSubID subId)
return town->getBuildingType(subId) != BuildingID::NONE;
}
void CGTownInstance::initOverriddenBids()
{
for(const auto & bid : builtBuildings)
{
const auto & overrideThem = town->buildings.at(bid)->overrideBids;
for(const auto & overrideIt : overrideThem)
overriddenBuildings.insert(overrideIt);
}
}
void CGTownInstance::initializeConfigurableBuildings(vstd::RNG & rand)
{
for(const auto & kvp : town->buildings)
{
if(!kvp.second->rewardableObjectInfo.getParameters().isNull())
bonusingBuildings.push_back(new CTownRewardableBuilding(this, kvp.second->bid, rand));
rewardableBuildings[kvp.first] = new TownRewardableBuildingInstance(this, kvp.second->bid, rand);
}
}
@@ -425,26 +415,6 @@ DamageRange CGTownInstance::getKeepDamageRange() const
};
}
void CGTownInstance::deleteTownBonus(BuildingID bid)
{
size_t i = 0;
CGTownBuilding * freeIt = nullptr;
for(i = 0; i != bonusingBuildings.size(); i++)
{
if(bonusingBuildings[i]->getBuildingType() == bid)
{
freeIt = bonusingBuildings[i];
break;
}
}
if(freeIt == nullptr)
return;
bonusingBuildings.erase(bonusingBuildings.begin() + i);
delete freeIt;
}
FactionID CGTownInstance::randomizeFaction(vstd::RNG & rand)
{
if(getOwner().isValidPlayer())
@@ -499,7 +469,6 @@ void CGTownInstance::initObj(vstd::RNG & rand) ///initialize town structures
creatures[level].second.push_back(town->creatures[level][upgradeNum]);
}
}
initOverriddenBids();
initializeConfigurableBuildings(rand);
recreateBuildingsBonuses();
updateAppearance();
@@ -576,8 +545,8 @@ void CGTownInstance::newTurn(vstd::RNG & rand) const
}
}
for(const auto * rewardableBuilding : bonusingBuildings)
rewardableBuilding->newTurn(rand);
for(const auto & building : rewardableBuildings)
building.second->newTurn(rand);
if(hasBuilt(BuildingSubID::BANK) && bonusValue.second > 0)
{
@@ -824,8 +793,9 @@ void CGTownInstance::recreateBuildingsBonuses()
for(const auto & bid : builtBuildings)
{
if(vstd::contains(overriddenBuildings, bid)) //tricky! -> checks tavern only if no bratherhood of sword
continue;
// FIXME: Restore
//if(vstd::contains(overriddenBuildings, bid)) //tricky! -> checks tavern only if no bratherhood of sword
// continue;
auto building = town->buildings.at(bid);
@@ -1256,8 +1226,21 @@ void CGTownInstance::fillUpgradeInfo(UpgradeInfo & info, const CStackInstance &s
void CGTownInstance::postDeserialize()
{
setNodeType(CBonusSystemNode::TOWN);
for(auto * bonusingBuilding : bonusingBuildings)
bonusingBuilding->town = this;
for(auto & building : rewardableBuildings)
building.second->town = this;
}
std::map<BuildingID, TownRewardableBuildingInstance*> CGTownInstance::convertOldBuildings(std::vector<TownRewardableBuildingInstance*> oldVector)
{
std::map<BuildingID, TownRewardableBuildingInstance*> result;
for(auto & building : oldVector)
{
result[building->getBuildingType()] = new TownRewardableBuildingInstance(*building);
delete building;
}
return result;
}
VCMI_LIB_NAMESPACE_END