MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / mergePartParameters

Method mergePartParameters

source/game/StarMonsterDatabase.cpp:265–310  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

263}
264
265Json MonsterDatabase::mergePartParameters(Json const& partParameterDescription, JsonArray const& parameters) {
266 JsonObject mergedParameters;
267
268 // First assign all the defaults.
269 for (auto const& pair : partParameterDescription.iterateObject())
270 mergedParameters[pair.first] = pair.second.get(1);
271
272 // Then go through parameter list and merge based on the merge rules.
273 for (auto const& applyParams : parameters) {
274 for (auto const& pair : applyParams.iterateObject()) {
275 String mergeMethod = partParameterDescription.get(pair.first).getString(0);
276 Json value = mergedParameters.get(pair.first);
277
278 if (mergeMethod.equalsIgnoreCase("add")) {
279 value = value.toDouble() + pair.second.toDouble();
280 } else if (mergeMethod.equalsIgnoreCase("multiply")) {
281 value = value.toDouble() * pair.second.toDouble();
282 } else if (mergeMethod.equalsIgnoreCase("merge")) {
283 // "merge" means to either merge maps, or *append* lists together
284 if (!pair.second.isNull()) {
285 if (value.isNull()) {
286 value = pair.second;
287 } else if (value.type() != pair.second.type()) {
288 value = pair.second;
289 } else {
290 if (pair.second.type() == Json::Type::Array) {
291 auto array = value.toArray();
292 array.appendAll(pair.second.toArray());
293 value = std::move(array);
294 } else if (pair.second.type() == Json::Type::Object) {
295 auto obj = value.toObject();
296 obj.merge(pair.second.toObject(), true);
297 value = std::move(obj);
298 }
299 }
300 }
301 } else if (mergeMethod.equalsIgnoreCase("override") && !pair.second.isNull()) {
302 value = pair.second;
303 }
304
305 mergedParameters[pair.first] = value;
306 }
307 }
308
309 return mergedParameters;
310}
311
312Json MonsterDatabase::mergeFinalParameters(JsonArray const& parameters) {
313 JsonObject mergedParameters;

Callers

nothing calls this directly

Calls 11

iterateObjectMethod · 0.80
getStringMethod · 0.80
toDoubleMethod · 0.80
toArrayMethod · 0.80
appendAllMethod · 0.80
toObjectMethod · 0.80
getMethod · 0.45
equalsIgnoreCaseMethod · 0.45
isNullMethod · 0.45
typeMethod · 0.45
mergeMethod · 0.45

Tested by

no test coverage detected