1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-13 13:18:43 +02:00

suggested changes

This commit is contained in:
SoundSSGood 2024-04-08 12:46:46 +03:00
parent cb6fc4a385
commit 39a0e56169
10 changed files with 86 additions and 66 deletions

View File

@ -185,11 +185,12 @@ void CAltarArtifacts::putBackArtifacts()
CMarketBase::MarketShowcasesParams CAltarArtifacts::getShowcasesParams() const
{
if(const auto art = hero->getArt(ArtifactPosition::TRANSITION_POS))
return std::make_tuple(
return MarketShowcasesParams
{
std::nullopt,
ShowcaseParams {std::to_string(offerQty), CGI->artifacts()->getByIndex(art->getTypeId())->getIconIndex()}
);
return std::make_tuple(std::nullopt, std::nullopt);
};
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CAltarArtifacts::onSlotClickPressed(const std::shared_ptr<CTradeableItem> & altarSlot, std::shared_ptr<TradePanelBase> & curPanel)

View File

@ -23,6 +23,7 @@
#include "../../../lib/CGeneralTextHandler.h"
#include "../../../lib/mapObjects/CGHeroInstance.h"
#include "../../../lib/mapObjects/CGMarket.h"
#include "../../../lib/MetaString.h"
CAltarCreatures::CAltarCreatures(const IMarket * market, const CGHeroInstance * hero)
: CMarketBase(market, hero)
@ -176,8 +177,8 @@ CMarketBase::MarketShowcasesParams CAltarCreatures::getShowcasesParams() const
if(bidTradePanel->isHighlighted())
bidSelected = ShowcaseParams {std::to_string(offerSlider->getValue()), CGI->creatures()->getByIndex(bidTradePanel->getSelectedItemId())->getIconIndex()};
if(offerTradePanel->isHighlighted() && offerSlider->getValue() > 0)
offerSelected = ShowcaseParams { offerTradePanel->highlightedSlot->subtitle->getText(), CGI->creatures()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()};
return std::make_tuple(bidSelected, offerSelected);
offerSelected = ShowcaseParams {offerTradePanel->highlightedSlot->subtitle->getText(), CGI->creatures()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()};
return MarketShowcasesParams {bidSelected, offerSelected};
}
void CAltarCreatures::sacrificeAll()
@ -256,9 +257,9 @@ std::string CAltarCreatures::getTraderText()
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[484]) %
CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNamePluralTranslated());
MetaString message = MetaString::createFromTextID("core.genrltxt.484");
message.replaceNamePlural(CreatureID(bidTradePanel->getSelectedItemId()));
return message.toString();
}
else
{

View File

@ -88,11 +88,13 @@ void CArtifactsBuying::makeDeal()
CMarketBase::MarketShowcasesParams CArtifactsBuying::getShowcasesParams() const
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
return std::make_tuple(
return MarketShowcasesParams
{
ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : bidQty), bidTradePanel->getSelectedItemId()},
ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : offerQty), CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()});
ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : offerQty), CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()}
};
else
return std::make_tuple(std::nullopt, std::nullopt);
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CArtifactsBuying::highlightingChanged()
@ -110,12 +112,12 @@ std::string CArtifactsBuying::getTraderText()
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[267]) %
CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getNameTranslated() %
bidQty %
(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()]);
MetaString message = MetaString::createFromTextID("core.genrltxt.267");
message.replaceName(ArtifactID(offerTradePanel->getSelectedItemId()));
message.replaceNumber(bidQty);
message.replaceTextID(bidQty == 1 ? "core.genrltxt.161" : "core.genrltxt.160");
message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
return message.toString();
}
else
{

View File

@ -122,12 +122,13 @@ std::shared_ptr<CArtifactsOfHeroMarket> CArtifactsSelling::getAOHset() const
CMarketBase::MarketShowcasesParams CArtifactsSelling::getShowcasesParams() const
{
if(hero->getArt(selectedHeroSlot) && offerTradePanel->isHighlighted())
return std::make_tuple(
return MarketShowcasesParams
{
std::nullopt,
ShowcaseParams {std::to_string(offerQty), offerTradePanel->getSelectedItemId()}
);
};
else
return std::make_tuple(std::nullopt, std::nullopt);
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CArtifactsSelling::updateSubtitles()
@ -154,12 +155,12 @@ std::string CArtifactsSelling::getTraderText()
const auto art = hero->getArt(selectedHeroSlot);
if(art && offerTradePanel->isHighlighted())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[268]) %
offerQty %
(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()] %
CGI->artifacts()->getByIndex(art->getTypeId())->getNameTranslated());
MetaString message = MetaString::createFromTextID("core.genrltxt.268");
message.replaceNumber(offerQty);
message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
message.replaceName(art->getTypeId());
return message.toString();
}
else
{

View File

@ -21,6 +21,7 @@
#include "../../../CCallback.h"
#include "../../../lib/CGeneralTextHandler.h"
#include "../../../lib/MetaString.h"
#include "../../../lib/mapObjects/CGHeroInstance.h"
#include "../../../lib/mapObjects/CGMarket.h"
@ -77,11 +78,13 @@ void CFreelancerGuild::makeDeal()
CMarketBase::MarketShowcasesParams CFreelancerGuild::getShowcasesParams() const
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
return std::make_tuple(
return MarketShowcasesParams
{
ShowcaseParams {std::to_string(bidQty * offerSlider->getValue()), CGI->creatures()->getByIndex(bidTradePanel->getSelectedItemId())->getIconIndex()},
ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()});
ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()}
};
else
return std::make_tuple(std::nullopt, std::nullopt);
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CFreelancerGuild::highlightingChanged()
@ -103,14 +106,16 @@ std::string CFreelancerGuild::getTraderText()
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[269]) %
offerQty %
(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()] %
bidQty %
(bidQty == 1 ? CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNameSingularTranslated() :
CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNamePluralTranslated()));
MetaString message = MetaString::createFromTextID("core.genrltxt.269");
message.replaceNumber(offerQty);
message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
message.replaceNumber(bidQty);
if(bidQty == 1)
message.replaceNameSingular(bidTradePanel->getSelectedItemId());
else
message.replaceNamePlural(bidTradePanel->getSelectedItemId());
return message.toString();
}
else
{

View File

@ -108,9 +108,9 @@ void CMarketBase::updateShowcases()
const auto params = getShowcasesParams();
if(bidTradePanel)
updateSelectedBody(bidTradePanel, std::get<0>(params));
updateSelectedBody(bidTradePanel, params.bidParams);
if(offerTradePanel)
updateSelectedBody(offerTradePanel, std::get<1>(params));
updateSelectedBody(offerTradePanel, params.offerParams);
}
void CMarketBase::highlightingChanged()

View File

@ -28,7 +28,11 @@ public:
std::string text;
int imageIndex;
};
using MarketShowcasesParams = std::tuple<std::optional<const ShowcaseParams>, std::optional<const ShowcaseParams>>;
struct MarketShowcasesParams
{
std::optional<const ShowcaseParams> bidParams;
std::optional<const ShowcaseParams> offerParams;
};
using ShowcasesParamsFunctor = std::function<const MarketShowcasesParams()>;
const IMarket * market;

View File

@ -21,6 +21,7 @@
#include "../../../CCallback.h"
#include "../../../lib/CGeneralTextHandler.h"
#include "../../../lib/MetaString.h"
#include "../../../lib/mapObjects/CGMarket.h"
CMarketResources::CMarketResources(const IMarket * market, const CGHeroInstance * hero)
@ -69,11 +70,13 @@ void CMarketResources::makeDeal()
CMarketBase::MarketShowcasesParams CMarketResources::getShowcasesParams() const
{
if(bidTradePanel->highlightedSlot && offerTradePanel->highlightedSlot && bidTradePanel->getSelectedItemId() != offerTradePanel->getSelectedItemId())
return std::make_tuple(
return MarketShowcasesParams
{
ShowcaseParams {std::to_string(bidQty * offerSlider->getValue()), bidTradePanel->getSelectedItemId()},
ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()});
ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()}
};
else
return std::make_tuple(std::nullopt, std::nullopt);
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CMarketResources::highlightingChanged()
@ -104,14 +107,14 @@ std::string CMarketResources::getTraderText()
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted() &&
bidTradePanel->getSelectedItemId() != offerTradePanel->getSelectedItemId())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[157]) %
offerQty %
(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()] %
bidQty %
(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()]);
MetaString message = MetaString::createFromTextID("core.genrltxt.157");
message.replaceNumber(offerQty);
message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
message.replaceNumber(bidQty);
message.replaceRawString(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
return message.toString();
}
else
{

View File

@ -21,6 +21,7 @@
#include "../../../CCallback.h"
#include "../../../lib/CGeneralTextHandler.h"
#include "../../../lib/MetaString.h"
CTransferResources::CTransferResources(const IMarket * market, const CGHeroInstance * hero)
: CMarketBase(market, hero)
@ -71,11 +72,13 @@ void CTransferResources::makeDeal()
CMarketBase::MarketShowcasesParams CTransferResources::getShowcasesParams() const
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
return std::make_tuple(
return MarketShowcasesParams
{
ShowcaseParams {std::to_string(offerSlider->getValue()), bidTradePanel->getSelectedItemId()},
ShowcaseParams {CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()], offerTradePanel->getSelectedItemId()});
ShowcaseParams {CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()], offerTradePanel->getSelectedItemId()}
};
else
return std::make_tuple(std::nullopt, std::nullopt);
return MarketShowcasesParams {std::nullopt, std::nullopt};
}
void CTransferResources::highlightingChanged()
@ -96,10 +99,10 @@ std::string CTransferResources::getTraderText()
{
if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
{
return boost::str(boost::format(
CGI->generaltexth->allTexts[165]) %
CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()] %
CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()]);
MetaString message = MetaString::createFromTextID("core.genrltxt.165");
message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
message.replaceName(PlayerColor(offerTradePanel->getSelectedItemId()));
return message.toString();
}
else
{

View File

@ -115,7 +115,7 @@ void CMarketWindow::artifactMoved(const ArtifactLocation & srcLoc, const Artifac
void CMarketWindow::createChangeModeButtons(EMarketMode currentMode, const IMarket * market, const CGHeroInstance * hero)
{
auto isButton = [currentMode, market, hero](EMarketMode modeButton) -> bool
auto isButtonVisible = [currentMode, market, hero](EMarketMode modeButton) -> bool
{
if(currentMode == modeButton)
return false;
@ -146,27 +146,27 @@ void CMarketWindow::createChangeModeButtons(EMarketMode currentMode, const IMark
buttonPos -= Point(0, buttonHeightWithMargin);
};
if(isButton(EMarketMode::RESOURCE_PLAYER))
if(isButtonVisible(EMarketMode::RESOURCE_PLAYER))
addButton(AnimationPath::builtin("TPMRKBU1.DEF"), CGI->generaltexth->zelp[612], std::bind(&CMarketWindow::createTransferResources, this, market, hero));
if(isButton(EMarketMode::ARTIFACT_RESOURCE))
if(isButtonVisible(EMarketMode::ARTIFACT_RESOURCE))
addButton(AnimationPath::builtin("TPMRKBU3.DEF"), CGI->generaltexth->zelp[613], std::bind(&CMarketWindow::createArtifactsSelling, this, market, hero));
if(isButton(EMarketMode::RESOURCE_ARTIFACT))
if(isButtonVisible(EMarketMode::RESOURCE_ARTIFACT))
addButton(AnimationPath::builtin("TPMRKBU2.DEF"), CGI->generaltexth->zelp[598], std::bind(&CMarketWindow::createArtifactsBuying, this, market, hero));
buttonPos = Point(516, 520 - buttonHeightWithMargin);
if(isButton(EMarketMode::CREATURE_RESOURCE))
if(isButtonVisible(EMarketMode::CREATURE_RESOURCE))
addButton(AnimationPath::builtin("TPMRKBU4.DEF"), CGI->generaltexth->zelp[599], std::bind(&CMarketWindow::createFreelancersGuild, this, market, hero));
if(isButton(EMarketMode::RESOURCE_RESOURCE))
if(isButtonVisible(EMarketMode::RESOURCE_RESOURCE))
addButton(AnimationPath::builtin("TPMRKBU5.DEF"), CGI->generaltexth->zelp[605], std::bind(&CMarketWindow::createMarketResources, this, market, hero));
buttonPos = Point(516, 421);
if(isButton(EMarketMode::CREATURE_EXP))
if(isButtonVisible(EMarketMode::CREATURE_EXP))
{
addButton(AnimationPath::builtin("ALTSACC.DEF"), CGI->generaltexth->zelp[572], std::bind(&CMarketWindow::createAltarCreatures, this, market, hero));
if(marketWidget->hero->getAlignment() == EAlignment::GOOD)
changeModeButtons.back()->block(true);
}
if(isButton(EMarketMode::ARTIFACT_EXP))
if(isButtonVisible(EMarketMode::ARTIFACT_EXP))
{
addButton(AnimationPath::builtin("ALTART.DEF"), CGI->generaltexth->zelp[580], std::bind(&CMarketWindow::createAltarArtifacts, this, market, hero));
if(marketWidget->hero->getAlignment() == EAlignment::EVIL)