1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-12-01 23:12:49 +02:00

Add new rewards for configurable objects

This commit is contained in:
Ivan Savenko
2025-04-30 21:51:14 +03:00
parent 9022566c2b
commit 62e774c91e
17 changed files with 144 additions and 71 deletions

View File

@@ -72,6 +72,25 @@ TownRewardableBuildingInstance::TownRewardableBuildingInstance(CGTownInstance *
configuration = generateConfiguration(rand);
}
void TownRewardableBuildingInstance::assignBonuses(std::vector<Bonus> & bonuses) const
{
const auto & building = town->getTown()->buildings.at(getBuildingType());
for (auto & bonus : bonuses)
{
if (building->mapObjectLikeBonuses.hasValue())
{
bonus.source = BonusSource::OBJECT_TYPE;
bonus.sid = BonusSourceID(building->mapObjectLikeBonuses);
}
else
{
bonus.source = BonusSource::TOWN_STRUCTURE;
bonus.sid = BonusSourceID(building->getUniqueTypeID());
}
}
}
Rewardable::Configuration TownRewardableBuildingInstance::generateConfiguration(vstd::RNG & rand) const
{
Rewardable::Configuration result;
@@ -82,19 +101,8 @@ Rewardable::Configuration TownRewardableBuildingInstance::generateConfiguration(
building->rewardableObjectInfo.configureObject(result, rand, cb);
for(auto & rewardInfo : result.info)
{
for (auto & bonus : rewardInfo.reward.bonuses)
{
if (building->mapObjectLikeBonuses.hasValue())
{
bonus.source = BonusSource::OBJECT_TYPE;
bonus.sid = BonusSourceID(building->mapObjectLikeBonuses);
}
else
{
bonus.source = BonusSource::TOWN_STRUCTURE;
bonus.sid = BonusSourceID(building->getUniqueTypeID());
}
}
assignBonuses(rewardInfo.reward.heroBonuses);
assignBonuses(rewardInfo.reward.playerBonuses);
}
return result;
}