| 608 | } |
| 609 | |
| 610 | pair<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 | |
| 655 | void WorldStorage::loadSectorToLevel(Sector const& sector, SectorLoadLevel targetLoadLevel) { |
| 656 | if (!m_tileArray->sectorValid(sector)) |
nothing calls this directly
no test coverage detected