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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user