MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / generateTerrain

Function generateTerrain

src/OpenLoco/src/Map/MapGenerator/MapGenerator.cpp:513–571  ·  view source on GitHub ↗

0x0046A021

Source from the content-addressed store, hash-verified

511
512 // 0x0046A021
513 static void generateTerrain(HeightMap& heightMap)
514 {
515 const auto style = getEverywhereSurfaceStyle();
516 if (!style.has_value())
517 {
518 return;
519 }
520
521 const TilePosRangeView tileLoop = getDrawableTileRange();
522 for (const auto& tilePos : tileLoop)
523 {
524 auto* surface = World::TileManager::get(tilePos).surface();
525 if (surface == nullptr)
526 {
527 continue;
528 }
529 surface->setTerrain(*style);
530 surface->setGrowthStage(0);
531
532 const auto variation = getRandomTerrainVariation(*surface);
533 if (variation.has_value())
534 {
535 surface->setVariation(*variation);
536 }
537 }
538
539 constexpr std::array landDistributionPatterns = {
540 Scenario::LandDistributionPattern::farFromWater,
541 Scenario::LandDistributionPattern::nearWater,
542 Scenario::LandDistributionPattern::onMountains,
543 Scenario::LandDistributionPattern::farFromMountains,
544 Scenario::LandDistributionPattern::inSmallRandomAreas,
545 Scenario::LandDistributionPattern::inLargeRandomAreas,
546 Scenario::LandDistributionPattern::aroundCliffs,
547 };
548
549 for (auto i = 0U; i < landDistributionPatterns.size(); i++)
550 {
551 updateProgress(55 + 12 * i);
552
553 for (uint8_t landObjectIdx = 0; landObjectIdx < ObjectManager::getMaxObjects(ObjectType::land); ++landObjectIdx)
554 {
555 const auto* landObj = ObjectManager::get<LandObject>(landObjectIdx);
556 if (landObj == nullptr)
557 {
558 continue;
559 }
560
561 const auto typePattern = Scenario::getOptions().landDistributionPatterns[landObjectIdx];
562 const auto distPattern = landDistributionPatterns[i];
563 if (typePattern != distPattern)
564 {
565 continue;
566 }
567
568 _generateFuncs[enumValue(distPattern)](heightMap, landObjectIdx);
569 }
570 }

Callers 1

generateFunction · 0.85

Calls 12

getDrawableTileRangeFunction · 0.85
updateProgressFunction · 0.85
getMaxObjectsFunction · 0.85
enumValueFunction · 0.85
surfaceMethod · 0.80
setTerrainMethod · 0.80
setGrowthStageMethod · 0.80
getFunction · 0.50
setVariationMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected