1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

Quick backpack. Spells on scrolls view

This commit is contained in:
SoundSSGood
2023-11-13 23:16:02 +02:00
parent 21b02414bf
commit 5099b52a4f
3 changed files with 32 additions and 3 deletions

View File

@@ -145,17 +145,40 @@ void CArtifactsOfHeroQuickBackpack::setHero(const CGHeroInstance * hero)
curHero = hero;
if(curHero)
{
ArtifactID artInSlotId = ArtifactID::NONE;
SpellID scrollInSlotSpellId = SpellID::NONE;
if(auto artInSlot = curHero->getArt(filterBySlot))
{
artInSlotId = artInSlot->getTypeId();
scrollInSlotSpellId = artInSlot->getScrollSpellID();
}
std::map<const CArtifact*, const CArtifactInstance*> filteredArts;
for(auto & slotInfo : curHero->artifactsInBackpack)
{
if(slotInfo.artifact->artType->canBePutAt(curHero, filterBySlot, true))
if(slotInfo.artifact->getTypeId() != artInSlotId && !slotInfo.artifact->isScroll() &&
slotInfo.artifact->artType->canBePutAt(curHero, filterBySlot, true))
{
filteredArts.insert(std::pair(slotInfo.artifact->artType, slotInfo.artifact));
}
std::map<const SpellID, const CArtifactInstance*> filteredScrolls;
if(filterBySlot == ArtifactPosition::MISC1 || filterBySlot == ArtifactPosition::MISC2 || filterBySlot == ArtifactPosition::MISC3 ||
filterBySlot == ArtifactPosition::MISC4 || filterBySlot == ArtifactPosition::MISC5)
{
for(auto & slotInfo : curHero->artifactsInBackpack)
{
if(slotInfo.artifact->isScroll() && slotInfo.artifact->getScrollSpellID() != scrollInSlotSpellId)
filteredScrolls.insert(std::pair(slotInfo.artifact->getScrollSpellID(), slotInfo.artifact));
}
}
backpack.clear();
initAOHbackpack(filteredArts.size(), false);
initAOHbackpack(filteredArts.size() + filteredScrolls.size(), false);
auto artPlace = backpack.begin();
for(auto & art : filteredArts)
setSlotData(*artPlace++, curHero->getSlotByInstance(art.second), *curHero);
for(auto & art : filteredScrolls)
setSlotData(*artPlace++, curHero->getSlotByInstance(art.second), *curHero);
}
}

View File

@@ -165,6 +165,11 @@ bool CArtifactInstance::isCombined() const
return artType->isCombined();
}
bool CArtifactInstance::isScroll() const
{
return artType->isScroll();
}
void CArtifactInstance::putAt(CArtifactSet & set, const ArtifactPosition slot)
{
auto placementMap = set.putArtifact(slot, this);

View File

@@ -87,6 +87,7 @@ public:
bool canBePutAt(const CArtifactSet * artSet, ArtifactPosition slot = ArtifactPosition::FIRST_AVAILABLE,
bool assumeDestRemoved = false) const;
bool isCombined() const;
bool isScroll() const;
void putAt(CArtifactSet & set, const ArtifactPosition slot);
void removeFrom(CArtifactSet & set, const ArtifactPosition slot);
void move(CArtifactSet & srcSet, const ArtifactPosition srcSlot, CArtifactSet & dstSet, const ArtifactPosition dstSlot);