1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-17 01:32:21 +02:00

Add support for custom icons & descriptions for bonuses

This commit is contained in:
Ivan Savenko
2025-05-19 23:30:41 +03:00
parent b806775f3a
commit 25655184d3
14 changed files with 86 additions and 43 deletions

View File

@ -615,10 +615,10 @@ std::shared_ptr<ILimiter> JsonUtils::parseLimiter(const JsonNode & limiter)
return nullptr;
}
std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability)
std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability, const TextIdentifier & descriptionID)
{
auto b = std::make_shared<Bonus>();
if (!parseBonus(ability, b.get()))
if (!parseBonus(ability, b.get(), descriptionID))
{
// caller code can not handle this case and presumes that returned bonus is always valid
logGlobal->error("Failed to parse bonus! Json config was %S ", ability.toString());
@ -628,7 +628,7 @@ std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability)
return b;
}
bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b)
bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b, const TextIdentifier & descriptionID)
{
const JsonNode * value = nullptr;
@ -671,12 +671,23 @@ bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b)
if(!ability["description"].isNull())
{
if (ability["description"].isString())
b->description.appendTextID(ability["description"].String());
if (ability["description"].isString() && !ability["description"].String().empty())
{
if (ability["description"].String()[0] == '@')
b->description.appendTextID(ability["description"].String());
else if (!descriptionID.get().empty())
{
LIBRARY->generaltexth->registerString(ability.getModScope(), descriptionID, ability["description"]);
b->description.appendTextID(descriptionID.get());
}
}
if (ability["description"].isNumber())
b->description.appendTextID("core.arraytxt." + std::to_string(ability["description"].Integer()));
}
if(!ability["icon"].isNull())
b->customIconPath = ImagePath::fromJson(ability["icon"]);
value = &ability["effectRange"];
if (!value->isNull())
b->effectRange = static_cast<BonusLimitEffect>(parseByMapN(bonusLimitEffect, value, "effect range "));