| 810 | } |
| 811 | |
| 812 | WorldRegion 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 | |
| 866 | void WorldLayout::addLayer(uint64_t seed, int yStart, RegionParams regionParams) { |
| 867 | WorldLayer layer; |
nothing calls this directly
no test coverage detected