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

Method generateSectorToLevel

source/game/StarWorldStorage.cpp:610–653  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

608}
609
610pair<bool, size_t> WorldStorage::generateSectorToLevel(Sector const& sector, SectorGenerationLevel targetGenerationLevel, size_t sectorGenerationLevelLimit) {
611 if (!m_tileArray->sectorValid(sector))
612 return {false, 0};
613
614 loadSectorToLevel(sector, SectorLoadLevel::Loaded);
615
616 auto& metadata = m_sectorMetadata[sector];
617
618 if (targetGenerationLevel == SectorGenerationLevel::Complete && metadata.generationLevel == SectorGenerationLevel::Terraform) {
619 m_generatorFacade->terraformSector(this, sector);
620 metadata.generationLevel = SectorGenerationLevel::Complete;
621 metadata.timeToLive = randomizedSectorTTL();
622 return {true, 1};
623 }
624
625 if (metadata.generationLevel >= targetGenerationLevel)
626 return {true, 0};
627
628 metadata.timeToLive = randomizedSectorTTL();
629
630 size_t totalGeneratedLevels = 0;
631 for (uint8_t i = (uint8_t)metadata.generationLevel + 1; i <= (uint8_t)targetGenerationLevel; ++i) {
632 SectorGenerationLevel currentGeneration = (SectorGenerationLevel)i;
633 SectorGenerationLevel stepDownGeneration = (SectorGenerationLevel)(i - 1);
634
635 if (stepDownGeneration != SectorGenerationLevel::None) {
636 for (auto adjacentSector : adjacentSectors(sector)) {
637 auto p = generateSectorToLevel(adjacentSector, stepDownGeneration, sectorGenerationLevelLimit - totalGeneratedLevels);
638 totalGeneratedLevels += p.second;
639 if (!p.first || totalGeneratedLevels >= sectorGenerationLevelLimit)
640 return {false, totalGeneratedLevels};
641 }
642 }
643
644 m_generatorFacade->generateSectorLevel(this, sector, currentGeneration);
645 metadata.generationLevel = currentGeneration;
646
647 ++totalGeneratedLevels;
648 if (totalGeneratedLevels >= sectorGenerationLevelLimit)
649 return {metadata.generationLevel == targetGenerationLevel, totalGeneratedLevels};
650 }
651
652 return {true, totalGeneratedLevels};
653}
654
655void WorldStorage::loadSectorToLevel(Sector const& sector, SectorLoadLevel targetLoadLevel) {
656 if (!m_tileArray->sectorValid(sector))

Callers

nothing calls this directly

Calls 3

terraformSectorMethod · 0.80
generateSectorLevelMethod · 0.80
sectorValidMethod · 0.45

Tested by

no test coverage detected