| 249 | } |
| 250 | |
| 251 | List<WorldTemplate::Dungeon> WorldTemplate::dungeons() const { |
| 252 | List<Dungeon> dungeonList; |
| 253 | |
| 254 | if (auto floatingDungeonParameters = as<FloatingDungeonWorldParameters>(m_worldParameters)) { |
| 255 | dungeonList.append({floatingDungeonParameters->primaryDungeon, floatingDungeonParameters->dungeonBaseHeight, 0, 0, true, false}); |
| 256 | } else if (auto terrestrialParameters = as<TerrestrialWorldParameters>(m_worldParameters)) { |
| 257 | auto addLayerDungeons = [this, &dungeonList](TerrestrialWorldParameters::TerrestrialLayer const& layer) { |
| 258 | if (layer.dungeons.size() > 0) { |
| 259 | int dungeonSpacing = floor(m_geometry.width() / layer.dungeons.size()); |
| 260 | uint32_t dungeonOffset = staticRandomU32Range(0, m_geometry.width(), m_seed, layer.layerBaseHeight); |
| 261 | for (auto const& dp : enumerateIterator(layer.dungeons)) { |
| 262 | dungeonList.append({dp.first, layer.layerBaseHeight, (int)dungeonOffset, layer.dungeonXVariance, false, true}); |
| 263 | dungeonOffset = (dungeonOffset + dungeonSpacing) % m_geometry.width(); |
| 264 | } |
| 265 | } |
| 266 | }; |
| 267 | |
| 268 | addLayerDungeons(terrestrialParameters->spaceLayer); |
| 269 | addLayerDungeons(terrestrialParameters->atmosphereLayer); |
| 270 | addLayerDungeons(terrestrialParameters->surfaceLayer); |
| 271 | addLayerDungeons(terrestrialParameters->subsurfaceLayer); |
| 272 | for (auto const& ul : terrestrialParameters->undergroundLayers) |
| 273 | addLayerDungeons(ul); |
| 274 | addLayerDungeons(terrestrialParameters->coreLayer); |
| 275 | } |
| 276 | |
| 277 | return dungeonList; |
| 278 | } |
| 279 | |
| 280 | WorldTemplate::BlockInfo WorldTemplate::blockInfo(int x, int y) const { |
| 281 | return getBlockInfo(m_geometry.xwrap(x), y); |
no test coverage detected