1
0
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:
AlexVinS
2014-05-18 20:27:12 +04:00
parent b4e702a1d2
commit 2fc16b231f

View File

@ -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"]);
} }