mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
Implement async requests for bonus types
This commit is contained in:
@@ -193,7 +193,7 @@ static void loadBonusSubtype(BonusSubtypeID & subtype, BonusType type, const Jso
|
||||
}
|
||||
}
|
||||
|
||||
static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & node)
|
||||
static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & value)
|
||||
{
|
||||
const auto & getFirstValue = [](const JsonNode & jsonNode) -> const JsonNode &
|
||||
{
|
||||
@@ -203,7 +203,6 @@ static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & no
|
||||
return jsonNode;
|
||||
};
|
||||
|
||||
const JsonNode & value = node["addInfo"];
|
||||
if (value.isNull())
|
||||
return;
|
||||
|
||||
@@ -432,11 +431,16 @@ VCMI_LIB_NAMESPACE_BEGIN
|
||||
std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonVector & ability_vec)
|
||||
{
|
||||
auto b = std::make_shared<Bonus>();
|
||||
std::string type = ability_vec[0].String();
|
||||
|
||||
b->type = LIBRARY->bth->stringToBonus(type);
|
||||
const JsonNode & typeNode = ability_vec[0];
|
||||
const JsonNode & subtypeNode = ability_vec[2];
|
||||
|
||||
LIBRARY->identifiers()->requestIdentifier("bonus", typeNode, [b, subtypeNode](si32 bonusID)
|
||||
{
|
||||
b->type = BonusType(bonusID);
|
||||
loadBonusSubtype(b->subtype, b->type, subtypeNode);
|
||||
});
|
||||
b->val = static_cast<si32>(ability_vec[1].Float());
|
||||
loadBonusSubtype(b->subtype, b->type, ability_vec[2]);
|
||||
b->additionalInfo = static_cast<si32>(ability_vec[3].Float());
|
||||
b->duration = BonusDuration::PERMANENT; //TODO: handle flags (as integer)
|
||||
b->turnsRemain = 0;
|
||||
@@ -517,8 +521,10 @@ std::shared_ptr<const ILimiter> JsonUtils::parseLimiter(const JsonNode & limiter
|
||||
|
||||
if (!parameters[0].isNull())
|
||||
{
|
||||
std::string anotherBonusType = parameters[0].String();
|
||||
bonusLimiter->type = LIBRARY->bth->stringToBonus(anotherBonusType);
|
||||
LIBRARY->identifiers()->requestIdentifier("bonus", parameters[0], [bonusLimiter](si32 bonusID)
|
||||
{
|
||||
bonusLimiter->type = BonusType(bonusID);
|
||||
});
|
||||
}
|
||||
|
||||
auto findSource = [&](const JsonNode & parameter)
|
||||
@@ -631,10 +637,15 @@ std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability, const Text
|
||||
bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b, const TextIdentifier & descriptionID)
|
||||
{
|
||||
const JsonNode * value = nullptr;
|
||||
const JsonNode & subtypeNode = ability["subtype"];
|
||||
const JsonNode & addinfoNode = ability["addInfo"];
|
||||
|
||||
b->type = LIBRARY->bth->stringToBonus(ability["type"].String());
|
||||
|
||||
loadBonusSubtype(b->subtype, b->type, ability["subtype"]);
|
||||
LIBRARY->identifiers()->requestIdentifier("bonus", ability["type"], [b, subtypeNode, addinfoNode](si32 bonusID)
|
||||
{
|
||||
b->type = BonusType(bonusID);
|
||||
loadBonusSubtype(b->subtype, b->type, subtypeNode);
|
||||
loadBonusAddInfo(b->additionalInfo, b->type, addinfoNode);
|
||||
});
|
||||
|
||||
b->val = static_cast<si32>(ability["val"].Float());
|
||||
|
||||
@@ -643,9 +654,6 @@ bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b, const TextIdentifi
|
||||
b->valType = static_cast<BonusValueType>(parseByMapN(bonusValueMap, value, "value type "));
|
||||
|
||||
b->stacking = ability["stacking"].String();
|
||||
|
||||
loadBonusAddInfo(b->additionalInfo, b->type, ability);
|
||||
|
||||
b->turnsRemain = static_cast<si32>(ability["turns"].Float());
|
||||
|
||||
if(!ability["description"].isNull())
|
||||
@@ -768,7 +776,7 @@ CSelector JsonUtils::parseSelector(const JsonNode & ability)
|
||||
value = &ability["type"];
|
||||
if(value->isString())
|
||||
{
|
||||
ret = ret.And(Selector::type()(LIBRARY->bth->stringToBonus(value->String())));
|
||||
ret = ret.And(Selector::type()(static_cast<BonusType>(*LIBRARY->identifiers()->getIdentifier("bonus", value->String()))));
|
||||
}
|
||||
value = &ability["subtype"];
|
||||
if(!value->isNull() && type != BonusType::NONE)
|
||||
|
Reference in New Issue
Block a user