1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-21 21:17:49 +02:00

setNewArtSlot

This commit is contained in:
SoundSSGood 2023-05-17 17:02:58 +03:00
parent f0feeeac6e
commit 5b281e6a9e
2 changed files with 14 additions and 19 deletions

View File

@ -1208,32 +1208,28 @@ bool CArtifactSet::isPositionFree(const ArtifactPosition & pos, bool onlyLockChe
return true; //no slot means not used return true; //no slot means not used
} }
ArtSlotInfo & CArtifactSet::retrieveNewArtSlot(const ArtifactPosition & slot) void CArtifactSet::setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked)
{ {
assert(!vstd::contains(artifactsWorn, slot)); assert(!vstd::contains(artifactsWorn, slot));
ArtSlotInfo * slotInfo;
if(slot == ArtifactPosition::TRANSITION_POS) if(slot == ArtifactPosition::TRANSITION_POS)
{ {
// Always add to the end. Always take from the beginning. // Always add to the end. Always take from the beginning.
artifactsTransitionPos.emplace_back(); artifactsTransitionPos.emplace_back();
return artifactsTransitionPos.back(); slotInfo = &artifactsTransitionPos.back();
} }
if(!ArtifactUtils::isSlotBackpack(slot)) else if(ArtifactUtils::isSlotEquipment(slot))
return artifactsWorn[slot];
ArtSlotInfo newSlot;
size_t index = slot - GameConstants::BACKPACK_START;
auto position = artifactsInBackpack.begin() + index;
auto inserted = artifactsInBackpack.insert(position, newSlot);
return *inserted;
}
void CArtifactSet::setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked)
{ {
ArtSlotInfo & asi = retrieveNewArtSlot(slot); slotInfo = &artifactsWorn[slot];
asi.artifact = art; }
asi.locked = locked; else
{
auto position = artifactsInBackpack.begin() + slot - GameConstants::BACKPACK_START;
slotInfo = &(*artifactsInBackpack.emplace(position, ArtSlotInfo()));
}
slotInfo->artifact = art;
slotInfo->locked = locked;
} }
void CArtifactSet::eraseArtSlot(const ArtifactPosition & slot) void CArtifactSet::eraseArtSlot(const ArtifactPosition & slot)

View File

@ -297,7 +297,6 @@ public:
std::map<ArtifactPosition, ArtSlotInfo> artifactsWorn; //map<position,artifact_id>; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5 std::map<ArtifactPosition, ArtSlotInfo> artifactsWorn; //map<position,artifact_id>; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5
std::vector<ArtSlotInfo> artifactsTransitionPos; // Used as transition position for dragAndDrop artifact exchange std::vector<ArtSlotInfo> artifactsTransitionPos; // Used as transition position for dragAndDrop artifact exchange
ArtSlotInfo & retrieveNewArtSlot(const ArtifactPosition & slot);
void setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked); void setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked);
void eraseArtSlot(const ArtifactPosition & slot); void eraseArtSlot(const ArtifactPosition & slot);