mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-25 22:42:04 +02:00
Rework campaign bonuses storage in type-safe form
Replaced campaign bonuses from using 3 integers to store anything with type-safe version that uses std::variant that ensures that all bonuses are in correct state. Also removed "interesting" solutions like storing primary skills using bit shifts. Prerequirement for HotA campaign support
This commit is contained in:
@@ -80,7 +80,7 @@ JsonNode CampaignRegions::toJson(CampaignRegions cr)
|
||||
JsonNode node;
|
||||
node["prefix"].String() = cr.campPrefix;
|
||||
node["colorSuffixLength"].Float() = cr.colorSuffixLength;
|
||||
if(!cr.campSuffix.size())
|
||||
if(cr.campSuffix.empty())
|
||||
node["suffix"].clear();
|
||||
else
|
||||
node["suffix"].Vector() = JsonVector{ JsonNode(cr.campSuffix[0]), JsonNode(cr.campSuffix[1]), JsonNode(cr.campSuffix[2]) };
|
||||
@@ -127,7 +127,7 @@ std::optional<Point> CampaignRegions::getLabelPosition(CampaignScenarioID which)
|
||||
return region.labelPos;
|
||||
}
|
||||
|
||||
ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, std::string type) const
|
||||
ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, const std::string & type) const
|
||||
{
|
||||
auto const & region = regions[which.getNum()];
|
||||
|
||||
@@ -166,24 +166,13 @@ ImagePath CampaignRegions::getConqueredName(CampaignScenarioID which, int color)
|
||||
return getNameFor(which, color, campSuffix[2]);
|
||||
}
|
||||
|
||||
|
||||
bool CampaignBonus::isBonusForHero() const
|
||||
{
|
||||
return type == CampaignBonusType::SPELL ||
|
||||
type == CampaignBonusType::MONSTER ||
|
||||
type == CampaignBonusType::ARTIFACT ||
|
||||
type == CampaignBonusType::SPELL_SCROLL ||
|
||||
type == CampaignBonusType::PRIMARY_SKILL ||
|
||||
type == CampaignBonusType::SECONDARY_SKILL;
|
||||
}
|
||||
|
||||
void CampaignHeader::loadLegacyData(ui8 campId)
|
||||
{
|
||||
campaignRegions = CampaignRegions::getLegacy(campId);
|
||||
numberOfScenarios = LIBRARY->generaltexth->getCampaignLength(campId);
|
||||
}
|
||||
|
||||
void CampaignHeader::loadLegacyData(CampaignRegions regions, int numOfScenario)
|
||||
void CampaignHeader::loadLegacyData(const CampaignRegions & regions, int numOfScenario)
|
||||
{
|
||||
campaignRegions = regions;
|
||||
numberOfScenarios = numOfScenario;
|
||||
|
||||
Reference in New Issue
Block a user