CArtifactHolder.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. void clickLeft(tribool down, bool previousState) override;
  36. const CArtifactInstance * getArt();
  37. virtual void setArtifact(const CArtifactInstance * art)=0;
  38. };
  39. class CCommanderArtPlace : public CArtPlace
  40. {
  41. protected:
  42. const CGHeroInstance * commanderOwner;
  43. ArtifactPosition commanderSlotID;
  44. void createImage() override;
  45. void returnArtToHeroCallback();
  46. public:
  47. CCommanderArtPlace(Point position, const CGHeroInstance * commanderOwner, ArtifactPosition artSlot, const CArtifactInstance * Art = nullptr);
  48. void clickLeft(tribool down, bool previousState) override;
  49. void showPopupWindow() override;
  50. void setArtifact(const CArtifactInstance * art) override;
  51. };
  52. class CHeroArtPlace: public CArtPlace
  53. {
  54. public:
  55. using ClickHandler = std::function<void(CHeroArtPlace&)>;
  56. ArtifactPosition slot;
  57. ClickHandler leftClickCallback;
  58. ClickHandler rightClickCallback;
  59. CHeroArtPlace(Point position, const CArtifactInstance * Art = nullptr);
  60. void lockSlot(bool on);
  61. bool isLocked();
  62. void selectSlot(bool on);
  63. bool isMarked() const;
  64. void clickLeft(tribool down, bool previousState) override;
  65. void showPopupWindow() override;
  66. void showAll(Canvas & to) override;
  67. void setArtifact(const CArtifactInstance * art) override;
  68. void addCombinedArtInfo(std::map<const CArtifact*, int> & arts);
  69. protected:
  70. std::shared_ptr<CAnimImage> selection;
  71. bool locked;
  72. bool marked;
  73. void createImage() override;
  74. };
  75. namespace ArtifactUtilsClient
  76. {
  77. bool askToAssemble(const CGHeroInstance * hero, const ArtifactPosition & slot);
  78. bool askToDisassemble(const CGHeroInstance * hero, const ArtifactPosition & slot);
  79. }