| 1338 | } |
| 1339 | |
| 1340 | DungeonDefinition::DungeonDefinition(JsonObject const& definition, String const& directory) { |
| 1341 | m_directory = directory; |
| 1342 | m_metadata = definition.get("metadata").toObject(); |
| 1343 | m_name = m_metadata.get("name").toString(); |
| 1344 | m_displayName = m_metadata.contains("displayName") ? m_metadata.get("displayName").toString() : ""; |
| 1345 | m_species = m_metadata.get("species").toString(); |
| 1346 | m_isProtected = m_metadata.contains("protected") ? m_metadata.get("protected").toBool() : false; |
| 1347 | if (m_metadata.contains("rules")) |
| 1348 | m_rules = Dungeon::Rule::readRules(m_metadata.get("rules")); |
| 1349 | |
| 1350 | m_maxRadius = m_metadata.value("maxRadius", 100).toInt(); |
| 1351 | m_maxParts = m_metadata.value("maxParts", 100).toInt(); |
| 1352 | m_extendSurfaceFreeSpace = m_metadata.value("extendSurfaceFreeSpace", 0).toInt(); |
| 1353 | |
| 1354 | m_anchors = jsonToStringList(m_metadata.get("anchor")); |
| 1355 | |
| 1356 | auto tileset = definition.maybe("tiles").apply([](Json const& tileset) { |
| 1357 | return make_shared<const Dungeon::ImageTileset>(tileset); |
| 1358 | }); |
| 1359 | |
| 1360 | for (auto const& partsDefMap : definition.get("parts").iterateArray()) { |
| 1361 | Dungeon::PartConstPtr part = parsePart(this, partsDefMap, tileset); |
| 1362 | if (m_parts.contains(part->name())) |
| 1363 | throw DungeonException::format("Duplicate dungeon part name: {}", part->name()); |
| 1364 | m_parts.insert(part->name(), part); |
| 1365 | } |
| 1366 | |
| 1367 | if (m_metadata.contains("gravity")) |
| 1368 | m_gravity = m_metadata.get("gravity").toFloat(); |
| 1369 | |
| 1370 | if (m_metadata.contains("breathable")) |
| 1371 | m_breathable = m_metadata.get("breathable").toBool(); |
| 1372 | } |
| 1373 | |
| 1374 | JsonObject DungeonDefinition::metadata() const { |
| 1375 | return m_metadata; |
nothing calls this directly
no test coverage detected