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

Method buildRegion

source/game/StarWorldLayout.cpp:812–864  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

810}
811
812WorldRegion WorldLayout::buildRegion(uint64_t seed, RegionParams const& regionParams) {
813 auto terrainDatabase = Root::singleton().terrainDatabase();
814 auto biomeDatabase = Root::singleton().biomeDatabase();
815
816 WorldRegion region;
817
818 TerrainSelectorParameters baseSelectorParameters;
819 baseSelectorParameters.worldWidth = m_worldSize[0];
820 baseSelectorParameters.baseHeight = regionParams.baseHeight;
821
822 TerrainSelectorParameters terrainSelectorParameters = baseSelectorParameters.withSeed(staticRandomU64(seed, "Terrain"));
823 TerrainSelectorParameters foregroundCaveSelectorParameters = baseSelectorParameters.withSeed(staticRandomU64(seed, "ForegroundCaveSeed"));
824 TerrainSelectorParameters backgroundCaveSelectorParameters = baseSelectorParameters.withSeed(staticRandomU64(seed, "BackgroundCave"));
825
826 if (regionParams.terrainSelector)
827 region.terrainSelectorIndex = registerTerrainSelector(terrainDatabase->createNamedSelector(*regionParams.terrainSelector, terrainSelectorParameters));
828 if (regionParams.fgCaveSelector)
829 region.foregroundCaveSelectorIndex = registerTerrainSelector(terrainDatabase->createNamedSelector(*regionParams.fgCaveSelector, foregroundCaveSelectorParameters));
830 if (regionParams.bgCaveSelector)
831 region.backgroundCaveSelectorIndex = registerTerrainSelector(terrainDatabase->createNamedSelector(*regionParams.bgCaveSelector, backgroundCaveSelectorParameters));
832
833 if (regionParams.biomeName) {
834 auto biome = biomeDatabase->createBiome(*regionParams.biomeName, staticRandomU64(seed, "BiomeSeed"), regionParams.baseHeight, regionParams.threatLevel);
835
836 if (regionParams.subBlockSelector) {
837 for (size_t i = 0; i < biome->subBlocks.size(); ++i) {
838 auto selector = terrainDatabase->createNamedSelector(*regionParams.subBlockSelector, terrainSelectorParameters.withSeed(staticRandomU64(seed, i, "subBlocks")));
839 region.subBlockSelectorIndexes.append(registerTerrainSelector(selector));
840 }
841 }
842
843 for (auto const& p : enumerateIterator(biome->ores)) {
844 auto oreSelectorTerrainParameters = terrainSelectorParameters.withCommonality(p.first.second);
845
846 if (regionParams.fgOreSelector) {
847 auto fgSelector = terrainDatabase->createNamedSelector(*regionParams.fgOreSelector, oreSelectorTerrainParameters.withSeed(staticRandomU64(seed, p.second, "FGOreSelector")));
848 region.foregroundOreSelectorIndexes.append(registerTerrainSelector(fgSelector));
849 }
850
851 if (regionParams.bgOreSelector) {
852 auto bgSelector = terrainDatabase->createNamedSelector(*regionParams.bgOreSelector, oreSelectorTerrainParameters.withSeed(staticRandomU64(seed, p.second, "BGOreSelector")));
853 region.backgroundOreSelectorIndexes.append(registerTerrainSelector(bgSelector));
854 }
855 }
856
857 region.blockBiomeIndex = registerBiome(biome);
858 region.environmentBiomeIndex = region.blockBiomeIndex;
859 }
860
861 region.regionLiquids = regionParams.regionLiquids;
862
863 return region;
864}
865
866void WorldLayout::addLayer(uint64_t seed, int yStart, RegionParams regionParams) {
867 WorldLayer layer;

Callers

nothing calls this directly

Calls 11

singletonClass · 0.85
staticRandomU64Function · 0.85
enumerateIteratorFunction · 0.85
terrainDatabaseMethod · 0.80
biomeDatabaseMethod · 0.80
withSeedMethod · 0.80
createNamedSelectorMethod · 0.80
createBiomeMethod · 0.80
withCommonalityMethod · 0.80
sizeMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected