mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Better implementation of granting multiple rewards
This commit is contained in:
parent
fe8bcc5758
commit
87bf4b752a
@ -55,33 +55,17 @@ void CRewardableObject::selectRewardWthMessage(const CGHeroInstance * contextHer
|
||||
|
||||
void CRewardableObject::grantAllRewardsWthMessage(const CGHeroInstance * contextHero, const std::vector<ui32> & rewardIndices, bool markAsVisit) const
|
||||
{
|
||||
// TODO: A single message for all rewards?
|
||||
if (rewardIndices.empty())
|
||||
return;
|
||||
|
||||
auto index = rewardIndices.front();
|
||||
auto vi = configuration.info.at(index);
|
||||
|
||||
logGlobal->debug("Granting reward %d. Message says: %s", index, vi.message.toString());
|
||||
// show message only if it is not empty or in infobox
|
||||
if (configuration.infoWindowType != EInfoWindowMode::MODAL || !vi.message.toString().empty())
|
||||
{
|
||||
InfoWindow iw;
|
||||
iw.player = contextHero->tempOwner;
|
||||
iw.text = vi.message;
|
||||
iw.components = loadComponents(contextHero, rewardIndices);
|
||||
iw.type = configuration.infoWindowType;
|
||||
if(!iw.components.empty() || !iw.text.toString().empty())
|
||||
cb->showInfoDialog(&iw);
|
||||
}
|
||||
// grant reward afterwards. Note that it may remove object
|
||||
if(markAsVisit)
|
||||
markAsVisited(contextHero);
|
||||
|
||||
for (auto index : rewardIndices)
|
||||
{
|
||||
grantReward(index, contextHero);
|
||||
// TODO: Allow a single message for multiple / all rewards?
|
||||
grantRewardWithMessage(contextHero, index, false);
|
||||
}
|
||||
// Mark visited only after all rewards were processed
|
||||
if(markAsVisit)
|
||||
markAsVisited(contextHero);
|
||||
}
|
||||
|
||||
std::vector<Component> CRewardableObject::loadComponents(const CGHeroInstance * contextHero, const std::vector<ui32> & rewardIndices) const
|
||||
@ -157,6 +141,12 @@ void CRewardableObject::onHeroVisit(const CGHeroInstance *h) const
|
||||
grantRewardWithMessage(h, rewardIndex, true);
|
||||
break;
|
||||
}
|
||||
case Rewardable::SELECT_ALL: // grant all possible
|
||||
{
|
||||
auto rewards = getAvailableRewards(h, Rewardable::EEventType::EVENT_FIRST_VISIT);
|
||||
grantAllRewardsWthMessage(h, rewards, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user