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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user