diff --git a/lib/CArtHandler.cpp b/lib/CArtHandler.cpp index 15456f832..d33f87721 100644 --- a/lib/CArtHandler.cpp +++ b/lib/CArtHandler.cpp @@ -1544,41 +1544,14 @@ DLL_LINKAGE ArtifactPosition ArtifactUtils::getArtifactDstPosition( const CArtif return ArtifactPosition(GameConstants::BACKPACK_START); } -namespace ArtifactUtils -{ - -DLL_LINKAGE const std::array unmovableSlots = -{ - ArtifactPosition::SPELLBOOK, - ArtifactPosition::MACH4 -}; - -DLL_LINKAGE const std::array constituentWornSlots = -{ - ArtifactPosition::HEAD, - ArtifactPosition::SHOULDERS, - ArtifactPosition::NECK, - ArtifactPosition::RIGHT_HAND, - ArtifactPosition::LEFT_HAND, - ArtifactPosition::TORSO, - ArtifactPosition::RIGHT_RING, - ArtifactPosition::LEFT_RING, - ArtifactPosition::FEET, - ArtifactPosition::MISC1, - ArtifactPosition::MISC2, - ArtifactPosition::MISC3, - ArtifactPosition::MISC4, - ArtifactPosition::MISC5, -}; - -DLL_LINKAGE bool isArtRemovable(const std::pair & slot) +DLL_LINKAGE bool ArtifactUtils::isArtRemovable(const std::pair & slot) { return slot.second.artifact && !slot.second.locked && !vstd::contains(unmovableSlots, slot.first); } -DLL_LINKAGE bool checkSpellbookIsNeeded(const CGHeroInstance * heroPtr, ArtifactID artID, ArtifactPosition slot) +DLL_LINKAGE bool ArtifactUtils::checkSpellbookIsNeeded(const CGHeroInstance * heroPtr, ArtifactID artID, ArtifactPosition slot) { // TODO what'll happen if Titan's thunder is equipped by pickin git up or the start of game? // Titan's Thunder creates new spellbook on equip @@ -1593,10 +1566,9 @@ DLL_LINKAGE bool checkSpellbookIsNeeded(const CGHeroInstance * heroPtr, Artifact return false; } -DLL_LINKAGE bool isSlotBackpack(ArtifactPosition slot) +DLL_LINKAGE bool ArtifactUtils::isSlotBackpack(ArtifactPosition slot) { return slot >= GameConstants::BACKPACK_START; } -}; VCMI_LIB_NAMESPACE_END diff --git a/lib/CArtHandler.h b/lib/CArtHandler.h index 81587cb3a..a631a6036 100644 --- a/lib/CArtHandler.h +++ b/lib/CArtHandler.h @@ -386,8 +386,28 @@ namespace ArtifactUtils DLL_LINKAGE ArtifactPosition getArtifactDstPosition( const CArtifactInstance * artifact, const CArtifactSet * target, ArtBearer::ArtBearer bearer); - DLL_LINKAGE extern const std::array unmovableSlots; - DLL_LINKAGE extern const std::array constituentWornSlots; + const std::array unmovableSlots = + { + ArtifactPosition::SPELLBOOK, + ArtifactPosition::MACH4 + }; + const std::array constituentWornSlots = + { + ArtifactPosition::HEAD, + ArtifactPosition::SHOULDERS, + ArtifactPosition::NECK, + ArtifactPosition::RIGHT_HAND, + ArtifactPosition::LEFT_HAND, + ArtifactPosition::TORSO, + ArtifactPosition::RIGHT_RING, + ArtifactPosition::LEFT_RING, + ArtifactPosition::FEET, + ArtifactPosition::MISC1, + ArtifactPosition::MISC2, + ArtifactPosition::MISC3, + ArtifactPosition::MISC4, + ArtifactPosition::MISC5, + }; DLL_LINKAGE bool isArtRemovable(const std::pair & slot); DLL_LINKAGE bool checkSpellbookIsNeeded(const CGHeroInstance * heroPtr, ArtifactID artID, ArtifactPosition slot); DLL_LINKAGE bool isSlotBackpack(ArtifactPosition slot); diff --git a/lib/mapObjects/CQuest.h b/lib/mapObjects/CQuest.h index bc98c7dad..31e2c6af0 100644 --- a/lib/mapObjects/CQuest.h +++ b/lib/mapObjects/CQuest.h @@ -15,19 +15,22 @@ #include "../CCreatureSet.h" #include "../NetPacksBase.h" +namespace std +{ + // Used in std::unordered_map + template<> struct hash + { + size_t operator()(const VCMI_LIB_WRAP_NAMESPACE(ArtifactID) & aid) const + { + return hash{}(aid.num); + } + }; +} + VCMI_LIB_NAMESPACE_BEGIN class CGCreature; -// Used in std::unordered_map -template<> struct std::hash -{ - std::size_t operator()(const ArtifactID & aid) const - { - return std::hash{}(aid.num); - } -}; - class DLL_LINKAGE CQuest final { mutable std::unordered_map artifactsRequirements; // artifact ID -> required count diff --git a/mapeditor/inspector/questwidget.cpp b/mapeditor/inspector/questwidget.cpp index 5f6f90346..c7103a101 100644 --- a/mapeditor/inspector/questwidget.cpp +++ b/mapeditor/inspector/questwidget.cpp @@ -134,7 +134,7 @@ QString QuestWidget::commitChanges() return QString("N/A"); case CQuest::Emission::MISSION_ART: seerhut.quest->m5arts.clear(); - seerhut.quest->m5arts.push_back(ui->targetId->currentIndex()); + seerhut.quest->m5arts.push_back(ArtifactID(ui->targetId->currentIndex())); //TODO: support multiple artifacts return ui->targetId->currentText(); case CQuest::Emission::MISSION_ARMY: