1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-29 23:07:48 +02:00

Remove marketModes as member

marketModes are now generated in runtime and are not a member of
IMarket. Was not a bad change, but towns load buildings before town type
is randomized, leading to case where market modes are not actually known
when building is added to town (like random towns with market built)

Since altar requires CArtifactSet for work, IMarket will now always
contain it, but it will only be accessible if market supports altar
mode.
This commit is contained in:
Ivan Savenko
2024-08-27 13:44:30 +00:00
parent 2ffce4a7c2
commit 20d5b33ea6
12 changed files with 55 additions and 96 deletions

View File

@@ -22,7 +22,7 @@ VCMI_LIB_NAMESPACE_BEGIN
bool IMarket::allowsTrade(const EMarketMode mode) const
{
return vstd::contains(marketModes, mode);
return vstd::contains(availableModes(), mode);
}
bool IMarket::getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode) const
@@ -140,42 +140,19 @@ int IMarket::availableUnits(const EMarketMode mode, const int marketItemSerial)
}
}
void IMarket::addMarketMode(const EMarketMode mode)
IMarket::IMarket()
:altarArtifactsStorage(std::make_unique<CArtifactSetAltar>())
{
marketModes.insert(mode);
if(mode == EMarketMode::ARTIFACT_EXP)
altarArtifactsStorage = std::make_shared<CArtifactSetAltar>();
}
void IMarket::addMarketMode(const std::set<EMarketMode> & modes)
{
for(const auto & mode : modes)
addMarketMode(mode);
}
IMarket::~IMarket() = default;
void IMarket::removeMarketMode(const EMarketMode mode)
CArtifactSet * IMarket::getArtifactsStorage() const
{
marketModes.erase(mode);
if(mode == EMarketMode::ARTIFACT_EXP)
altarArtifactsStorage.reset();
}
void IMarket::removeMarketMode(const std::set<EMarketMode> & modes)
{
for(const auto & mode : modes)
removeMarketMode(mode);
}
void IMarket::removeAllMarketModes()
{
marketModes.clear();
}
std::shared_ptr<CArtifactSet> IMarket::getArtifactsStorage() const
{
return altarArtifactsStorage;
if (availableModes().count(EMarketMode::ARTIFACT_EXP))
return altarArtifactsStorage.get();
else
return nullptr;
}
std::vector<TradeItemBuy> IMarket::availableItemsIds(const EMarketMode mode) const
@@ -192,9 +169,4 @@ std::vector<TradeItemBuy> IMarket::availableItemsIds(const EMarketMode mode) con
return ret;
}
std::set<EMarketMode> IMarket::availableModes() const
{
return marketModes;
}
VCMI_LIB_NAMESPACE_END