CMarketBase.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * CMarketBase.h, 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. #pragma once
  11. #include "TradePanels.h"
  12. #include "../../widgets/Slider.h"
  13. #include "../../render/EFont.h"
  14. #include "../../render/Colors.h"
  15. VCMI_LIB_NAMESPACE_BEGIN
  16. class IMarket;
  17. VCMI_LIB_NAMESPACE_END
  18. class CMarketBase : public CIntObject
  19. {
  20. public:
  21. struct ShowcaseParams
  22. {
  23. std::string text;
  24. int imageIndex;
  25. };
  26. struct MarketShowcasesParams
  27. {
  28. std::optional<const ShowcaseParams> bidParams;
  29. std::optional<const ShowcaseParams> offerParams;
  30. };
  31. using ShowcasesParamsFunctor = std::function<const MarketShowcasesParams()>;
  32. const IMarket * market;
  33. const CGHeroInstance * hero;
  34. std::shared_ptr<TradePanelBase> bidTradePanel;
  35. std::shared_ptr<TradePanelBase> offerTradePanel;
  36. std::shared_ptr<CButton> deal;
  37. std::vector<std::shared_ptr<CLabel>> labels;
  38. std::vector<std::shared_ptr<CTextBox>> texts;
  39. int bidQty;
  40. int offerQty;
  41. const Point dealButtonPos = Point(270, 520);
  42. const Point titlePos = Point(299, 27);
  43. CMarketBase(const IMarket * market, const CGHeroInstance * hero);
  44. virtual void makeDeal() = 0;
  45. virtual void deselect();
  46. virtual void update();
  47. protected:
  48. virtual void onSlotClickPressed(const std::shared_ptr<CTradeableItem> & newSlot, std::shared_ptr<TradePanelBase> & curPanel);
  49. virtual void updateSubtitlesForBid(EMarketMode marketMode, int bidId);
  50. virtual void updateShowcases();
  51. virtual MarketShowcasesParams getShowcasesParams() const;
  52. virtual void highlightingChanged();
  53. };
  54. // Market subclasses
  55. class CExperienceAltar : virtual public CMarketBase
  56. {
  57. public:
  58. std::shared_ptr<CLabel> expToLevel;
  59. std::shared_ptr<CLabel> expForHero;
  60. std::shared_ptr<CButton> sacrificeAllButton;
  61. CExperienceAltar();
  62. void deselect() override;
  63. void update() override;
  64. virtual void sacrificeAll() = 0;
  65. virtual TExpType calcExpAltarForHero() = 0;
  66. };
  67. class CCreaturesSelling : virtual public CMarketBase
  68. {
  69. public:
  70. CCreaturesSelling();
  71. bool slotDeletingCheck(const std::shared_ptr<CTradeableItem> & slot) const;
  72. void updateSubtitles() const;
  73. };
  74. class CResourcesBuying : virtual public CMarketBase
  75. {
  76. public:
  77. CResourcesBuying(const CTradeableItem::ClickPressedFunctor & clickPressedCallback,
  78. const TradePanelBase::UpdateSlotsFunctor & updSlotsCallback);
  79. };
  80. class CResourcesSelling : virtual public CMarketBase
  81. {
  82. public:
  83. explicit CResourcesSelling(const CTradeableItem::ClickPressedFunctor & clickPressedCallback);
  84. void updateSubtitles() const;
  85. };
  86. class CMarketSlider : virtual public CMarketBase
  87. {
  88. public:
  89. std::shared_ptr<CSlider> offerSlider;
  90. std::shared_ptr<CButton> maxAmount;
  91. const Point dealButtonPosWithSlider = Point(306, 520);
  92. explicit CMarketSlider(const CSlider::SliderMovingFunctor & movingCallback);
  93. void deselect() override;
  94. virtual void onOfferSliderMoved(int newVal);
  95. };
  96. class CMarketTraderText : virtual public CMarketBase
  97. {
  98. public:
  99. CMarketTraderText(const Point & pos = Point(316, 48), const EFonts & font = EFonts::FONT_SMALL, const ColorRGBA & Color = Colors::WHITE);
  100. void deselect() override;
  101. void makeDeal() override;
  102. const Point traderTextDimensions = Point(260, 75);
  103. std::shared_ptr<CTextBox> traderText;
  104. bool madeTransaction;
  105. protected:
  106. void highlightingChanged() override;
  107. virtual std::string getTraderText() = 0;
  108. };