diff --git a/client/CPlayerInterface.cpp b/client/CPlayerInterface.cpp index 37d32d2dc..79c434432 100644 --- a/client/CPlayerInterface.cpp +++ b/client/CPlayerInterface.cpp @@ -1780,7 +1780,10 @@ void CPlayerInterface::artifactMoved(const ArtifactLocation &src, const Artifact { artWin->artifactMoved(src, dst); if(numOfMovedArts == 0) + { artWin->update(); + artWin->redraw(); + } } waitWhileDialog(); } diff --git a/client/widgets/CArtifactsOfHeroAltar.cpp b/client/widgets/CArtifactsOfHeroAltar.cpp index 19e79f02d..bcef56cd1 100644 --- a/client/widgets/CArtifactsOfHeroAltar.cpp +++ b/client/widgets/CArtifactsOfHeroAltar.cpp @@ -21,12 +21,8 @@ CArtifactsOfHeroAltar::CArtifactsOfHeroAltar(const Point & position) { - init( - std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2), - std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2), - position, - std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); - + init(position, std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); + enableGesture(); // The backpack is in the altar window above and to the right for(auto & slot : backpack) slot->moveBy(Point(2, -1)); diff --git a/client/widgets/CArtifactsOfHeroBase.cpp b/client/widgets/CArtifactsOfHeroBase.cpp index eedb5d4e8..e7b9ec078 100644 --- a/client/widgets/CArtifactsOfHeroBase.cpp +++ b/client/widgets/CArtifactsOfHeroBase.cpp @@ -47,8 +47,6 @@ void CArtifactsOfHeroBase::putBackPickedArtifact() } void CArtifactsOfHeroBase::init( - const CArtPlace::ClickFunctor & onClickPressedCallback, - const CArtPlace::ClickFunctor & onShowPopupCallback, const Point & position, const BpackScrollFunctor & scrollCallback) { @@ -69,14 +67,14 @@ void CArtifactsOfHeroBase::init( { artPlace.second->slot = artPlace.first; artPlace.second->setArtifact(nullptr); - artPlace.second->setClickPressedCallback(onClickPressedCallback); - artPlace.second->setShowPopupCallback(onShowPopupCallback); + artPlace.second->setClickPressedCallback(std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2)); + artPlace.second->setShowPopupCallback(std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2)); } for(auto artPlace : backpack) { artPlace->setArtifact(nullptr); - artPlace->setClickPressedCallback(onClickPressedCallback); - artPlace->setShowPopupCallback(onShowPopupCallback); + artPlace->setClickPressedCallback(std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2)); + artPlace->setShowPopupCallback(std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2)); } leftBackpackRoll = std::make_shared(Point(379, 364), AnimationPath::builtin("hsbtns3.def"), CButton::tooltip(), [scrollCallback](){scrollCallback(true);}, EShortcut::MOVE_LEFT); @@ -226,11 +224,11 @@ const CArtifactInstance * CArtifactsOfHeroBase::getPickedArtifact() return nullptr; } -void CArtifactsOfHeroBase::addGestureCallback(CArtPlace::ClickFunctor callback) +void CArtifactsOfHeroBase::enableGesture() { for(auto & artPlace : artWorn) { - artPlace.second->setGestureCallback(callback); + artPlace.second->setGestureCallback(std::bind(&CArtifactsOfHeroBase::gestureArtPlace, this, _1, _2)); artPlace.second->addUsedEvents(GESTURE); } } diff --git a/client/widgets/CArtifactsOfHeroBase.h b/client/widgets/CArtifactsOfHeroBase.h index fbbb8bb0f..108203c20 100644 --- a/client/widgets/CArtifactsOfHeroBase.h +++ b/client/widgets/CArtifactsOfHeroBase.h @@ -45,11 +45,10 @@ public: virtual void updateBackpackSlots(); virtual void updateSlot(const ArtifactPosition & slot); virtual const CArtifactInstance * getPickedArtifact(); - void addGestureCallback(CArtPlace::ClickFunctor callback); + void enableGesture(); const CArtifactInstance * getArt(const ArtifactPosition & slot) const; void enableKeyboardShortcuts(); -protected: const CGHeroInstance * curHero; ArtPlaceMap artWorn; std::vector backpack; @@ -67,8 +66,8 @@ protected: Point(381,295) //18 }; - virtual void init(const CHeroArtPlace::ClickFunctor & lClickCallback, const CHeroArtPlace::ClickFunctor & showPopupCallback, - const Point & position, const BpackScrollFunctor & scrollCallback); +protected: + virtual void init(const Point & position, const BpackScrollFunctor & scrollCallback); // Assigns an artifacts to an artifact place depending on it's new slot ID virtual void setSlotData(ArtPlacePtr artPlace, const ArtifactPosition & slot); }; diff --git a/client/widgets/CArtifactsOfHeroKingdom.cpp b/client/widgets/CArtifactsOfHeroKingdom.cpp index c72bf8a00..e65bd8bfb 100644 --- a/client/widgets/CArtifactsOfHeroKingdom.cpp +++ b/client/widgets/CArtifactsOfHeroKingdom.cpp @@ -33,7 +33,7 @@ CArtifactsOfHeroKingdom::CArtifactsOfHeroKingdom(ArtPlaceMap ArtWorn, std::vecto artPlace.second->setClickPressedCallback(std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2)); artPlace.second->setShowPopupCallback(std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2)); } - addGestureCallback(std::bind(&CArtifactsOfHeroBase::gestureArtPlace, this, _1, _2)); + enableGesture(); for(auto artPlace : backpack) { artPlace->setArtifact(nullptr); diff --git a/client/widgets/CArtifactsOfHeroMain.cpp b/client/widgets/CArtifactsOfHeroMain.cpp index 808cb0cd2..40c503e92 100644 --- a/client/widgets/CArtifactsOfHeroMain.cpp +++ b/client/widgets/CArtifactsOfHeroMain.cpp @@ -20,12 +20,8 @@ CArtifactsOfHeroMain::CArtifactsOfHeroMain(const Point & position) { - init( - std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2), - std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2), - position, - std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); - addGestureCallback(std::bind(&CArtifactsOfHeroBase::gestureArtPlace, this, _1, _2)); + init(position, std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); + enableGesture(); } CArtifactsOfHeroMain::~CArtifactsOfHeroMain() diff --git a/client/widgets/CArtifactsOfHeroMarket.cpp b/client/widgets/CArtifactsOfHeroMarket.cpp index 4df55cdaa..7158d0371 100644 --- a/client/widgets/CArtifactsOfHeroMarket.cpp +++ b/client/widgets/CArtifactsOfHeroMarket.cpp @@ -14,11 +14,7 @@ CArtifactsOfHeroMarket::CArtifactsOfHeroMarket(const Point & position, const int selectionWidth) { - init( - std::bind(&CArtifactsOfHeroBase::clickPrassedArtPlace, this, _1, _2), - std::bind(&CArtifactsOfHeroBase::showPopupArtPlace, this, _1, _2), - position, - std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); + init(position, std::bind(&CArtifactsOfHeroBase::scrollBackpack, this, _1)); for(const auto & [slot, artPlace] : artWorn) artPlace->setSelectionWidth(selectionWidth); @@ -26,8 +22,11 @@ CArtifactsOfHeroMarket::CArtifactsOfHeroMarket(const Point & position, const int artPlace->setSelectionWidth(selectionWidth); }; -void CArtifactsOfHeroMarket::onClickPressedArtPlace(CArtPlace & artPlace) +void CArtifactsOfHeroMarket::clickPrassedArtPlace(CArtPlace & artPlace, const Point & cursorPosition) { + if(artPlace.isLocked()) + return; + if(const auto art = getArt(artPlace.slot)) { if(onSelectArtCallback && art->artType->isTradable()) diff --git a/client/widgets/CArtifactsOfHeroMarket.h b/client/widgets/CArtifactsOfHeroMarket.h index 9dba21202..87334c0d7 100644 --- a/client/widgets/CArtifactsOfHeroMarket.h +++ b/client/widgets/CArtifactsOfHeroMarket.h @@ -18,5 +18,5 @@ public: std::function onClickNotTradableCallback; CArtifactsOfHeroMarket(const Point & position, const int selectionWidth); - void onClickPressedArtPlace(CArtPlace & artPlace); + void clickPrassedArtPlace(CArtPlace & artPlace, const Point & cursorPosition) override; }; diff --git a/client/windows/CHeroBackpackWindow.cpp b/client/windows/CHeroBackpackWindow.cpp index e63dc991e..94fd4510b 100644 --- a/client/windows/CHeroBackpackWindow.cpp +++ b/client/windows/CHeroBackpackWindow.cpp @@ -31,7 +31,7 @@ CHeroBackpackWindow::CHeroBackpackWindow(const CGHeroInstance * hero, const std: stretchedBackground = std::make_shared(ImagePath::builtin("DIBOXBCK"), Rect(0, 0, 0, 0)); arts = std::make_shared(); arts->moveBy(Point(windowMargin, windowMargin)); - arts->clickPressedCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) + arts->clickPressedCallback = [this](const CArtPlace & artPlace, const Point & cursorPosition) { clickPressedOnArtPlace(arts->getHero(), artPlace.slot, true, false, true); }; @@ -41,7 +41,6 @@ CHeroBackpackWindow::CHeroBackpackWindow(const CGHeroInstance * hero, const std: }; addSet(arts); arts->setHero(hero); - addCloseCallback(std::bind(&CHeroBackpackWindow::close, this)); quitButton = std::make_shared(Point(), AnimationPath::builtin("IOKAY32.def"), CButton::tooltip(""), [this]() { WindowBase::close(); }, EShortcut::GLOBAL_RETURN); pos.w = stretchedBackground->pos.w = arts->pos.w + 2 * windowMargin; @@ -66,18 +65,17 @@ CHeroQuickBackpackWindow::CHeroQuickBackpackWindow(const CGHeroInstance * hero, stretchedBackground = std::make_shared(ImagePath::builtin("DIBOXBCK"), Rect(0, 0, 0, 0)); arts = std::make_shared(targetSlot); arts->moveBy(Point(windowMargin, windowMargin)); - arts->clickPressedCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) + arts->clickPressedCallback = [this](const CArtPlace & artPlace, const Point & cursorPosition) { if(const auto curHero = arts->getHero()) swapArtifactAndClose(*arts, artPlace.slot, ArtifactLocation(curHero->id, arts->getFilterSlot())); }; arts->showPopupCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) { - showArifactInfo(artPlace, cursorPosition); + showArifactInfo(*arts, artPlace, cursorPosition); }; addSet(arts); arts->setHero(hero); - addCloseCallback(std::bind(&CHeroQuickBackpackWindow::close, this)); addUsedEvents(GESTURE); pos.w = stretchedBackground->pos.w = arts->pos.w + 2 * windowMargin; pos.h = stretchedBackground->pos.h = arts->pos.h + windowMargin; diff --git a/client/windows/CHeroWindow.cpp b/client/windows/CHeroWindow.cpp index 2399701e1..aa2e31307 100644 --- a/client/windows/CHeroWindow.cpp +++ b/client/windows/CHeroWindow.cpp @@ -213,19 +213,10 @@ void CHeroWindow::update() if(!arts) { arts = std::make_shared(Point(-65, -8)); + arts->clickPressedCallback = [this](const CArtPlace & artPlace, const Point & cursorPosition){clickPressedOnArtPlace(curHero, artPlace.slot, true, false, false);}; + arts->showPopupCallback = [this](CArtPlace & artPlace, const Point & cursorPosition){showArtifactAssembling(*arts, artPlace, cursorPosition);}; + arts->gestureCallback = [this](const CArtPlace & artPlace, const Point & cursorPosition){showQuickBackpackWindow(curHero, artPlace.slot, cursorPosition);}; arts->setHero(curHero); - arts->clickPressedCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) - { - clickPressedOnArtPlace(arts->getHero(), artPlace.slot, true, false, false); - }; - arts->showPopupCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) - { - showArtifactAssembling(*arts, artPlace, cursorPosition); - }; - arts->gestureCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) - { - showQuickBackpackWindow(arts->getHero(), artPlace.slot, cursorPosition); - }; addSet(arts); enableKeyboardShortcuts(); } diff --git a/client/windows/CKingdomInterface.cpp b/client/windows/CKingdomInterface.cpp index 5170fe595..5783ec246 100644 --- a/client/windows/CKingdomInterface.cpp +++ b/client/windows/CKingdomInterface.cpp @@ -550,7 +550,7 @@ std::shared_ptr CKingdomInterface::createMainTab(size_t index) case 0: return std::make_shared(size, [this](const CWindowWithArtifacts::CArtifactsOfHeroPtr & newHeroSet) { - newHeroSet->clickPressedCallback = [this, newHeroSet](CArtPlace & artPlace, const Point & cursorPosition) + newHeroSet->clickPressedCallback = [this, newHeroSet](const CArtPlace & artPlace, const Point & cursorPosition) { clickPressedOnArtPlace(newHeroSet->getHero(), artPlace.slot, false, false, false); }; @@ -558,7 +558,7 @@ std::shared_ptr CKingdomInterface::createMainTab(size_t index) { showArtifactAssembling(*newHeroSet, artPlace, cursorPosition); }; - newHeroSet->gestureCallback = [this, newHeroSet](CArtPlace & artPlace, const Point & cursorPosition) + newHeroSet->gestureCallback = [this, newHeroSet](const CArtPlace & artPlace, const Point & cursorPosition) { showQuickBackpackWindow(newHeroSet->getHero(), artPlace.slot, cursorPosition); }; diff --git a/client/windows/CMarketWindow.cpp b/client/windows/CMarketWindow.cpp index 366520e0d..f189506f3 100644 --- a/client/windows/CMarketWindow.cpp +++ b/client/windows/CMarketWindow.cpp @@ -195,14 +195,7 @@ void CMarketWindow::createArtifactsSelling(const IMarket * market, const CGHeroI auto artsSellingMarket = std::make_shared(market, hero); artSets.clear(); const auto heroArts = artsSellingMarket->getAOHset(); - heroArts->clickPressedCallback = [heroArts](CArtPlace & artPlace, const Point & cursorPosition) - { - heroArts->onClickPressedArtPlace(artPlace); - }; - heroArts->showPopupCallback = [this](CArtPlace & artPlace, const Point & cursorPosition) - { - showArifactInfo(artPlace, cursorPosition); - }; + heroArts->showPopupCallback = [this, heroArts](CArtPlace & artPlace, const Point & cursorPosition){showArifactInfo(*heroArts, artPlace, cursorPosition);}; addSet(heroArts); marketWidget = artsSellingMarket; initWidgetInternals(EMarketMode::ARTIFACT_RESOURCE, CGI->generaltexth->zelp[600]); @@ -244,7 +237,7 @@ void CMarketWindow::createAltarArtifacts(const IMarket * market, const CGHeroIns marketWidget = altarArtifacts; artSets.clear(); const auto heroArts = altarArtifacts->getAOHset(); - heroArts->clickPressedCallback = [this, heroArts](CArtPlace & artPlace, const Point & cursorPosition) + heroArts->clickPressedCallback = [this, heroArts](const CArtPlace & artPlace, const Point & cursorPosition) { clickPressedOnArtPlace(heroArts->getHero(), artPlace.slot, true, true, false); }; @@ -252,7 +245,7 @@ void CMarketWindow::createAltarArtifacts(const IMarket * market, const CGHeroIns { showArtifactAssembling(*heroArts, artPlace, cursorPosition); }; - heroArts->gestureCallback = [this, heroArts](CArtPlace & artPlace, const Point & cursorPosition) + heroArts->gestureCallback = [this, heroArts](const CArtPlace & artPlace, const Point & cursorPosition) { showQuickBackpackWindow(heroArts->getHero(), artPlace.slot, cursorPosition); }; diff --git a/client/windows/CWindowWithArtifacts.cpp b/client/windows/CWindowWithArtifacts.cpp index 1c9ab0802..313178600 100644 --- a/client/windows/CWindowWithArtifacts.cpp +++ b/client/windows/CWindowWithArtifacts.cpp @@ -44,16 +44,11 @@ void CWindowWithArtifacts::addSet(const std::shared_ptr & artSets.emplace_back(newArtSet); } -void CWindowWithArtifacts::addCloseCallback(const CloseCallback & callback) -{ - closeCallback = callback; -} - -const CGHeroInstance * CWindowWithArtifacts::getHeroPickedArtifact() +const CGHeroInstance * CWindowWithArtifacts::getHeroPickedArtifact() const { const CGHeroInstance * hero = nullptr; - for(auto & artSet : artSets) + for(const auto & artSet : artSets) if(const auto pickedArt = artSet->getHero()->getArt(ArtifactPosition::TRANSITION_POS)) { hero = artSet->getHero(); @@ -62,11 +57,11 @@ const CGHeroInstance * CWindowWithArtifacts::getHeroPickedArtifact() return hero; } -const CArtifactInstance * CWindowWithArtifacts::getPickedArtifact() +const CArtifactInstance * CWindowWithArtifacts::getPickedArtifact() const { const CArtifactInstance * art = nullptr; - for(auto & artSet : artSets) + for(const auto & artSet : artSets) if(const auto pickedArt = artSet->getHero()->getArt(ArtifactPosition::TRANSITION_POS)) { art = pickedArt; @@ -108,11 +103,10 @@ void CWindowWithArtifacts::clickPressedOnArtPlace(const CGHeroInstance * hero, c } void CWindowWithArtifacts::swapArtifactAndClose(const CArtifactsOfHeroBase & artsInst, const ArtifactPosition & slot, - const ArtifactLocation & dstLoc) const + const ArtifactLocation & dstLoc) { LOCPLINT->cb->swapArtifacts(ArtifactLocation(artsInst.getHero()->id, slot), dstLoc); - if(closeCallback) - closeCallback(); + close(); } void CWindowWithArtifacts::showArtifactAssembling(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, @@ -129,9 +123,9 @@ void CWindowWithArtifacts::showArtifactAssembling(const CArtifactsOfHeroBase & a } } -void CWindowWithArtifacts::showArifactInfo(CArtPlace & artPlace, const Point & cursorPosition) const +void CWindowWithArtifacts::showArifactInfo(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition) const { - if(artPlace.getArt() && artPlace.text.size()) + if(artsInst.getArt(artPlace.slot) && artPlace.text.size()) artPlace.LRClickableAreaWTextComp::showPopupWindow(cursorPosition); } @@ -176,7 +170,7 @@ void CWindowWithArtifacts::artifactRemoved(const ArtifactLocation & artLoc) void CWindowWithArtifacts::artifactMoved(const ArtifactLocation & srcLoc, const ArtifactLocation & destLoc) { - for(auto & artSet : artSets) + for(const auto & artSet : artSets) if(const auto pickedArtInst = getPickedArtifact()) { markPossibleSlots(); @@ -202,7 +196,7 @@ void CWindowWithArtifacts::artifactAssembled(const ArtifactLocation & artLoc) void CWindowWithArtifacts::update() { - for(auto & artSet : artSets) + for(const auto & artSet : artSets) { artSet->updateWornSlots(); artSet->updateBackpackSlots(); @@ -213,20 +207,19 @@ void CWindowWithArtifacts::update() } } -void CWindowWithArtifacts::markPossibleSlots() +void CWindowWithArtifacts::markPossibleSlots() const { if(const auto pickedArtInst = getPickedArtifact()) { - const auto heroArtOwner = getHeroPickedArtifact(); - for(auto & artSet : artSets) + for(const auto & artSet : artSets) { - if(artSet->isActive()) - { - const auto hero = artSet->getHero(); - if(heroArtOwner == hero || !std::dynamic_pointer_cast(artSet)) - artSet->markPossibleSlots(pickedArtInst, hero->tempOwner == LOCPLINT->playerID); - } - }; + const auto hero = artSet->getHero(); + if(hero == nullptr || !artSet->isActive()) + continue; + + if(getHeroPickedArtifact() == hero || !std::dynamic_pointer_cast(artSet)) + artSet->markPossibleSlots(pickedArtInst, hero->tempOwner == LOCPLINT->playerID); + } } } @@ -255,7 +248,7 @@ bool CWindowWithArtifacts::checkSpecialArts(const CArtifactInstance & artInst, c return true; } -void CWindowWithArtifacts::setCursorAnimation(const CArtifactInstance & artInst) +void CWindowWithArtifacts::setCursorAnimation(const CArtifactInstance & artInst) const { if(artInst.isScroll() && settings["general"]["enableUiEnhancements"].Bool()) { @@ -270,7 +263,7 @@ void CWindowWithArtifacts::setCursorAnimation(const CArtifactInstance & artInst) } } -void CWindowWithArtifacts::putPickedArtifact(const CGHeroInstance & curHero, const ArtifactPosition & targetSlot) +void CWindowWithArtifacts::putPickedArtifact(const CGHeroInstance & curHero, const ArtifactPosition & targetSlot) const { const auto heroArtOwner = getHeroPickedArtifact(); const auto pickedArt = getPickedArtifact(); @@ -307,16 +300,13 @@ void CWindowWithArtifacts::onClickPressedCommonArtifact(const CGHeroInstance & c if(GH.isKeyboardCmdDown()) { - for(auto & anotherSet : artSets) + for(const auto & anotherSet : artSets) { - if(std::dynamic_pointer_cast(anotherSet)) + if(std::dynamic_pointer_cast(anotherSet) && curHero.id != anotherSet->getHero()->id) { - if(curHero.id != anotherSet->getHero()->id) - { - dstLoc.slot = ArtifactPosition::FIRST_AVAILABLE; - dstLoc.artHolder = anotherSet->getHero()->id; - break; - } + dstLoc.slot = ArtifactPosition::FIRST_AVAILABLE; + dstLoc.artHolder = anotherSet->getHero()->id; + break; } if(const auto heroSetAltar = std::dynamic_pointer_cast(anotherSet)) { @@ -334,11 +324,10 @@ void CWindowWithArtifacts::onClickPressedCommonArtifact(const CGHeroInstance & c else if(ArtifactUtils::isSlotBackpack(slot)) dstLoc.slot = ArtifactUtils::getArtEquippedPosition(&curHero, artId); } - else if(closeWindow && closeCallback) + else if(closeWindow) { - closeCallback(); + close(); } if(dstLoc.slot != ArtifactPosition::PRE_FIRST) LOCPLINT->cb->swapArtifacts(srcLoc, dstLoc); - } diff --git a/client/windows/CWindowWithArtifacts.h b/client/windows/CWindowWithArtifacts.h index e874d867f..2eb3810f7 100644 --- a/client/windows/CWindowWithArtifacts.h +++ b/client/windows/CWindowWithArtifacts.h @@ -20,21 +20,18 @@ class CWindowWithArtifacts : virtual public CWindowObject { public: using CArtifactsOfHeroPtr = std::shared_ptr; - using CloseCallback = std::function; std::vector artSets; - CloseCallback closeCallback; explicit CWindowWithArtifacts(const std::vector * artSets = nullptr); void addSet(const std::shared_ptr & newArtSet); - void addCloseCallback(const CloseCallback & callback); - const CGHeroInstance * getHeroPickedArtifact(); - const CArtifactInstance * getPickedArtifact(); + const CGHeroInstance * getHeroPickedArtifact() const; + const CArtifactInstance * getPickedArtifact() const; void clickPressedOnArtPlace(const CGHeroInstance * hero, const ArtifactPosition & slot, bool allowExchange, bool altarTrading, bool closeWindow); - void swapArtifactAndClose(const CArtifactsOfHeroBase & artsInst, const ArtifactPosition & slot, const ArtifactLocation & dstLoc) const; + void swapArtifactAndClose(const CArtifactsOfHeroBase & artsInst, const ArtifactPosition & slot, const ArtifactLocation & dstLoc); void showArtifactAssembling(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition) const; - void showArifactInfo(CArtPlace & artPlace, const Point & cursorPosition) const; + void showArifactInfo(const CArtifactsOfHeroBase & artsInst, CArtPlace & artPlace, const Point & cursorPosition) const; void showQuickBackpackWindow(const CGHeroInstance * hero, const ArtifactPosition & slot, const Point & cursorPosition) const; void activate() override; void deactivate() override; @@ -47,9 +44,9 @@ public: virtual void update(); protected: - void markPossibleSlots(); + void markPossibleSlots() const; bool checkSpecialArts(const CArtifactInstance & artInst, const CGHeroInstance & hero, bool isTrade) const; - void setCursorAnimation(const CArtifactInstance & artInst); - void putPickedArtifact(const CGHeroInstance & curHero, const ArtifactPosition & targetSlot); + void setCursorAnimation(const CArtifactInstance & artInst) const; + void putPickedArtifact(const CGHeroInstance & curHero, const ArtifactPosition & targetSlot) const; void onClickPressedCommonArtifact(const CGHeroInstance & curHero, const ArtifactPosition & slot, bool closeWindow); }; diff --git a/client/windows/GUIClasses.cpp b/client/windows/GUIClasses.cpp index af3ca89f9..1bd07ffb4 100644 --- a/client/windows/GUIClasses.cpp +++ b/client/windows/GUIClasses.cpp @@ -759,35 +759,16 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, } artifs[0] = std::make_shared(Point(-334, 151)); + artifs[0]->clickPressedCallback = [this, hero = heroInst[0]](const CArtPlace & artPlace, const Point & cursorPosition){clickPressedOnArtPlace(hero, artPlace.slot, true, false, false);}; + artifs[0]->showPopupCallback = [this, heroArts = artifs[0]](CArtPlace & artPlace, const Point & cursorPosition){showArtifactAssembling(*heroArts, artPlace, cursorPosition);}; + artifs[0]->gestureCallback = [this, hero = heroInst[0]](const CArtPlace & artPlace, const Point & cursorPosition){showQuickBackpackWindow(hero, artPlace.slot, cursorPosition);}; artifs[0]->setHero(heroInst[0]); artifs[1] = std::make_shared(Point(98, 151)); + artifs[1]->clickPressedCallback = [this, hero = heroInst[1]](const CArtPlace & artPlace, const Point & cursorPosition){clickPressedOnArtPlace(hero, artPlace.slot, true, false, false);}; + artifs[1]->showPopupCallback = [this, heroArts = artifs[1]](CArtPlace & artPlace, const Point & cursorPosition){showArtifactAssembling(*heroArts, artPlace, cursorPosition);}; + artifs[1]->gestureCallback = [this, hero = heroInst[1]](const CArtPlace & artPlace, const Point & cursorPosition){showQuickBackpackWindow(hero, artPlace.slot, cursorPosition);}; artifs[1]->setHero(heroInst[1]); - artifs[0]->clickPressedCallback = [this, heroArts = artifs[0]](CArtPlace & artPlace, const Point & cursorPosition) - { - clickPressedOnArtPlace(heroArts->getHero(), artPlace.slot, true, false, false); - }; - artifs[0]->showPopupCallback = [this, heroArts = artifs[0]](CArtPlace & artPlace, const Point & cursorPosition) - { - showArtifactAssembling(*heroArts, artPlace, cursorPosition); - }; - artifs[0]->gestureCallback = [this, heroArts = artifs[0]](CArtPlace & artPlace, const Point & cursorPosition) - { - showQuickBackpackWindow(heroArts->getHero(), artPlace.slot, cursorPosition); - }; - artifs[1]->clickPressedCallback = [this, heroArts = artifs[1]](CArtPlace & artPlace, const Point & cursorPosition) - { - clickPressedOnArtPlace(heroArts->getHero(), artPlace.slot, true, false, false); - }; - artifs[1]->showPopupCallback = [this, heroArts = artifs[1]](CArtPlace & artPlace, const Point & cursorPosition) - { - showArtifactAssembling(*heroArts, artPlace, cursorPosition); - }; - artifs[1]->gestureCallback = [this, heroArts = artifs[1]](CArtPlace & artPlace, const Point & cursorPosition) - { - showQuickBackpackWindow(heroArts->getHero(), artPlace.slot, cursorPosition); - }; - addSet(artifs[0]); addSet(artifs[1]); @@ -950,7 +931,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, } } - update(); + CWindowWithArtifacts::update(); } const CGarrisonSlot * CExchangeWindow::getSelectedSlotID() const