CArtifactHolder.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * CArtifactHolder.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 "MiscWidgets.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. struct ArtifactLocation;
  14. class CArtifactSet;
  15. VCMI_LIB_NAMESPACE_END
  16. class CAnimImage;
  17. class CButton;
  18. class CArtifactHolder
  19. {
  20. public:
  21. virtual void artifactRemoved(const ArtifactLocation & artLoc)=0;
  22. virtual void artifactMoved(const ArtifactLocation & artLoc, const ArtifactLocation & destLoc, bool withRedraw)=0;
  23. virtual void artifactDisassembled(const ArtifactLocation & artLoc)=0;
  24. virtual void artifactAssembled(const ArtifactLocation & artLoc)=0;
  25. };
  26. class CArtPlace : public LRClickableAreaWTextComp
  27. {
  28. protected:
  29. std::shared_ptr<CAnimImage> image;
  30. const CArtifactInstance * ourArt;
  31. void setInternals(const CArtifactInstance * artInst);
  32. virtual void createImage()=0;
  33. public:
  34. CArtPlace(Point position, const CArtifactInstance * Art = nullptr);
  35. const CArtifactInstance * getArt();
  36. virtual void setArtifact(const CArtifactInstance * art)=0;
  37. };
  38. class CCommanderArtPlace : public CArtPlace
  39. {
  40. protected:
  41. const CGHeroInstance * commanderOwner;
  42. ArtifactPosition commanderSlotID;
  43. void createImage() override;
  44. void returnArtToHeroCallback();
  45. public:
  46. CCommanderArtPlace(Point position, const CGHeroInstance * commanderOwner, ArtifactPosition artSlot, const CArtifactInstance * Art = nullptr);
  47. void clickPressed(const Point & cursorPosition) override;
  48. void showPopupWindow(const Point & cursorPosition) override;
  49. void setArtifact(const CArtifactInstance * art) override;
  50. };
  51. class CHeroArtPlace: public CArtPlace
  52. {
  53. public:
  54. using ClickHandler = std::function<void(CHeroArtPlace&)>;
  55. ArtifactPosition slot;
  56. ClickHandler leftClickCallback;
  57. ClickHandler rightClickCallback;
  58. CHeroArtPlace(Point position, const CArtifactInstance * Art = nullptr);
  59. void lockSlot(bool on);
  60. bool isLocked();
  61. void selectSlot(bool on);
  62. bool isMarked() const;
  63. void clickPressed(const Point & cursorPosition) override;
  64. void showPopupWindow(const Point & cursorPosition) override;
  65. void showAll(Canvas & to) override;
  66. void setArtifact(const CArtifactInstance * art) override;
  67. void addCombinedArtInfo(std::map<const CArtifact*, int> & arts);
  68. protected:
  69. std::shared_ptr<CAnimImage> selection;
  70. bool locked;
  71. bool marked;
  72. void createImage() override;
  73. };
  74. namespace ArtifactUtilsClient
  75. {
  76. bool askToAssemble(const CGHeroInstance * hero, const ArtifactPosition & slot);
  77. bool askToDisassemble(const CGHeroInstance * hero, const ArtifactPosition & slot);
  78. }