/* * CWindowWithArtifacts.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once #include "../widgets/CArtifactsOfHeroMain.h" #include "../widgets/CArtifactsOfHeroKingdom.h" #include "../widgets/CArtifactsOfHeroAltar.h" #include "../widgets/CArtifactsOfHeroMarket.h" #include "../widgets/CArtifactsOfHeroBackpack.h" #include "CWindowObject.h" class CWindowWithArtifacts : virtual public CWindowObject { public: using CArtifactsOfHeroPtr = std::variant< std::weak_ptr, std::weak_ptr, std::weak_ptr, std::weak_ptr, std::weak_ptr, std::weak_ptr>; using CloseCallback = std::function; std::vector artSets; CloseCallback closeCallback; explicit CWindowWithArtifacts(const std::vector * artSets = nullptr); void addSet(CArtifactsOfHeroPtr newArtSet); void addSetAndCallbacks(CArtifactsOfHeroPtr newArtSet); void addCloseCallback(const CloseCallback & callback); const CGHeroInstance * getHeroPickedArtifact(); const CArtifactInstance * getPickedArtifact(); void clickPressedArtPlaceHero(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition); void showPopupArtPlaceHero(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition); void gestureArtPlaceHero(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition); void activate() override; void deactivate() override; void enableArtifactsCostumeSwitcher() const; virtual void artifactRemoved(const ArtifactLocation & artLoc); virtual void artifactMoved(const ArtifactLocation & srcLoc, const ArtifactLocation & destLoc, bool withRedraw); virtual void artifactDisassembled(const ArtifactLocation & artLoc); virtual void artifactAssembled(const ArtifactLocation & artLoc); protected: void update() const; std::optional> getState(); std::optional findAOHbyRef(const CArtifactsOfHeroBase & artsInst); void markPossibleSlots(); bool checkSpecialArts(const CArtifactInstance & artInst, const CGHeroInstance * hero, bool isTrade) const; void setCursorAnimation(const CArtifactInstance & artInst); };