CTransferResources.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * CTransferResources.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "CTransferResources.h"
  12. #include "../../GameEngine.h"
  13. #include "../../GameInstance.h"
  14. #include "../../gui/Shortcut.h"
  15. #include "../../widgets/Buttons.h"
  16. #include "../../widgets/TextControls.h"
  17. #include "../../CPlayerInterface.h"
  18. #include "../../../lib/callback/CCallback.h"
  19. #include "../../../lib/texts/CGeneralTextHandler.h"
  20. #include "../../../lib/mapObjects/IMarket.h"
  21. #include "../../../lib/texts/MetaString.h"
  22. #include "../../../lib/GameLibrary.h"
  23. CTransferResources::CTransferResources(const IMarket * market, const CGHeroInstance * hero)
  24. : CMarketBase(market, hero)
  25. , CResourcesSelling([this](const std::shared_ptr<CTradeableItem> & heroSlot){CTransferResources::onSlotClickPressed(heroSlot, bidTradePanel);})
  26. , CMarketSlider([this](int newVal){CMarketSlider::onOfferSliderMoved(newVal);})
  27. , CMarketTraderText(Point(28, 48))
  28. {
  29. OBJECT_CONSTRUCTION;
  30. labels.emplace_back(std::make_shared<CLabel>(titlePos.x, titlePos.y, FONT_BIG, ETextAlignment::CENTER, Colors::YELLOW, LIBRARY->generaltexth->allTexts[158]));
  31. labels.emplace_back(std::make_shared<CLabel>(445, 56, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, LIBRARY->generaltexth->allTexts[169]));
  32. deal = std::make_shared<CButton>(dealButtonPosWithSlider, AnimationPath::builtin("TPMRKB.DEF"),
  33. LIBRARY->generaltexth->zelp[595], [this](){CTransferResources::makeDeal();}, EShortcut::MARKET_DEAL);
  34. // Player's resources
  35. assert(bidTradePanel);
  36. bidTradePanel->moveTo(pos.topLeft() + Point(40, 183));
  37. // Players panel
  38. offerTradePanel = std::make_shared<PlayersPanel>([this](const std::shared_ptr<CTradeableItem> & heroSlot)
  39. {
  40. CTransferResources::onSlotClickPressed(heroSlot, offerTradePanel);
  41. });
  42. offerTradePanel->moveTo(pos.topLeft() + Point(333, 84));
  43. CMarketBase::update();
  44. CTransferResources::deselect();
  45. }
  46. void CTransferResources::deselect()
  47. {
  48. CMarketBase::deselect();
  49. CMarketSlider::deselect();
  50. CMarketTraderText::deselect();
  51. }
  52. void CTransferResources::makeDeal()
  53. {
  54. if(auto toTrade = offerSlider->getValue(); toTrade != 0)
  55. {
  56. GAME->interface()->cb->trade(market->getObjInstanceID(), EMarketMode::RESOURCE_PLAYER, GameResID(bidTradePanel->getHighlightedItemId()),
  57. PlayerColor(offerTradePanel->getHighlightedItemId()), toTrade, hero);
  58. CMarketTraderText::makeDeal();
  59. deselect();
  60. }
  61. }
  62. CMarketBase::MarketShowcasesParams CTransferResources::getShowcasesParams() const
  63. {
  64. if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
  65. return MarketShowcasesParams
  66. {
  67. ShowcaseParams {std::to_string(offerSlider->getValue()), bidTradePanel->getHighlightedItemId()},
  68. ShowcaseParams {LIBRARY->generaltexth->capColors[offerTradePanel->getHighlightedItemId()], offerTradePanel->getHighlightedItemId()}
  69. };
  70. else
  71. return MarketShowcasesParams {std::nullopt, std::nullopt};
  72. }
  73. void CTransferResources::highlightingChanged()
  74. {
  75. if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
  76. {
  77. offerSlider->setAmount(GAME->interface()->cb->getResourceAmount(GameResID(bidTradePanel->getHighlightedItemId())));
  78. offerSlider->scrollTo(0);
  79. offerSlider->block(false);
  80. maxAmount->block(false);
  81. deal->block(!GAME->interface()->makingTurn);
  82. }
  83. CMarketBase::highlightingChanged();
  84. CMarketTraderText::highlightingChanged();
  85. }
  86. std::string CTransferResources::getTraderText()
  87. {
  88. if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
  89. {
  90. MetaString message = MetaString::createFromTextID("core.genrltxt.165");
  91. message.replaceName(GameResID(bidTradePanel->getHighlightedItemId()));
  92. message.replaceName(PlayerColor(offerTradePanel->getHighlightedItemId()));
  93. return message.toString();
  94. }
  95. else
  96. {
  97. return madeTransaction ? LIBRARY->generaltexth->allTexts[166] : LIBRARY->generaltexth->allTexts[167];
  98. }
  99. }