CWindowWithArtifacts.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * CWindowWithArtifacts.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 "CArtifactHolder.h"
  12. #include "CArtifactsOfHeroMain.h"
  13. #include "CArtifactsOfHeroKingdom.h"
  14. #include "CArtifactsOfHeroAltar.h"
  15. #include "CArtifactsOfHeroMarket.h"
  16. class CWindowWithArtifacts : public CArtifactHolder
  17. {
  18. public:
  19. using CArtifactsOfHeroPtr = std::variant<
  20. std::weak_ptr<CArtifactsOfHeroMarket>,
  21. std::weak_ptr<CArtifactsOfHeroAltar>,
  22. std::weak_ptr<CArtifactsOfHeroKingdom>,
  23. std::weak_ptr<CArtifactsOfHeroMain>>;
  24. void addSet(CArtifactsOfHeroPtr artSet);
  25. const CGHeroInstance * getHeroPickedArtifact();
  26. const CArtifactInstance * getPickedArtifact();
  27. void leftClickArtPlaceHero(CArtifactsOfHeroBase & artsInst, CHeroArtPlace & artPlace);
  28. void rightClickArtPlaceHero(CArtifactsOfHeroBase & artsInst, CHeroArtPlace & artPlace);
  29. void artifactRemoved(const ArtifactLocation & artLoc) override;
  30. void artifactMoved(const ArtifactLocation & srcLoc, const ArtifactLocation & destLoc, bool withRedraw) override;
  31. void artifactDisassembled(const ArtifactLocation & artLoc) override;
  32. void artifactAssembled(const ArtifactLocation & artLoc) override;
  33. private:
  34. std::vector<CArtifactsOfHeroPtr> artSets;
  35. void updateSlots(const ArtifactPosition & slot);
  36. std::optional<std::tuple<const CGHeroInstance*, const CArtifactInstance*>> getState();
  37. std::optional<CArtifactsOfHeroPtr> findAOHbyRef(CArtifactsOfHeroBase & artsInst);
  38. };