mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-03 00:46:55 +02:00
Implemented inheritance semantic for spell level configuration.
This allows more simplification.
This commit is contained in:
@ -868,16 +868,22 @@ void CSpellHandler::beforeValidate(JsonNode & object)
|
|||||||
{
|
{
|
||||||
//handle "base" level info
|
//handle "base" level info
|
||||||
|
|
||||||
JsonNode levels = object["levels"];
|
JsonNode& levels = object["levels"];
|
||||||
|
JsonNode& base = levels["base"];
|
||||||
|
|
||||||
if(levels["base"].getType() == JsonNode::DATA_STRUCT)
|
auto inheritNode = [&](JsonNode & dest){
|
||||||
{
|
//merging destination node into copy of base node implements inheritance semantic
|
||||||
JsonUtils::mergeCopy(levels["none"],levels["base"]);
|
//detail configuration is priority
|
||||||
JsonUtils::mergeCopy(levels["basic"],levels["base"]);
|
//this allows more simplification
|
||||||
JsonUtils::mergeCopy(levels["advanced"],levels["base"]);
|
JsonNode inheritedNode(base);
|
||||||
JsonUtils::mergeCopy(levels["expert"],levels["base"]);
|
JsonUtils::merge(inheritedNode,dest);
|
||||||
}
|
dest.swap(inheritedNode);
|
||||||
|
};
|
||||||
|
|
||||||
|
inheritNode(levels["none"]);
|
||||||
|
inheritNode(levels["basic"]);
|
||||||
|
inheritNode(levels["advanced"]);
|
||||||
|
inheritNode(levels["expert"]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user