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

Method dungeons

source/game/StarWorldTemplate.cpp:251–278  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

249}
250
251List<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
280WorldTemplate::BlockInfo WorldTemplate::blockInfo(int x, int y) const {
281 return getBlockInfo(m_geometry.xwrap(x), y);

Callers 1

initMethod · 0.80

Calls 5

staticRandomU32RangeFunction · 0.85
enumerateIteratorFunction · 0.85
appendMethod · 0.45
sizeMethod · 0.45
widthMethod · 0.45

Tested by

no test coverage detected