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

Method generate

source/game/StarDungeonGenerator.cpp:1431–1455  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1429}
1430
1431Maybe<pair<List<RectI>, Set<Vec2I>>> DungeonGenerator::generate(DungeonGeneratorWorldFacadePtr facade, Vec2I position, bool markSurfaceAndTerrain, bool forcePlacement) {
1432 String name = m_def->name();
1433 try {
1434 Dungeon::DungeonGeneratorWriter writer(facade, markSurfaceAndTerrain ? position[1] : Maybe<int>(), m_def->extendSurfaceFreeSpace());
1435
1436 Logger::debug(forcePlacement ? "Forcing generation of dungeon {}" : "Generating dungeon {}", name);
1437
1438 Dungeon::PartConstPtr anchor = pickAnchor();
1439 if (!anchor) {
1440 Logger::error("No valid anchor piece found for dungeon {} at {}", name, position);
1441 return {};
1442 }
1443
1444 auto pos = position + Vec2I(0, -anchor->placementLevelConstraint());
1445 if (forcePlacement || anchor->canPlace(pos, &writer)) {
1446 Logger::info("Placing dungeon {} at {}", name, position);
1447 return buildDungeon(anchor, pos, &writer, forcePlacement);
1448 } else {
1449 Logger::debug("Failed to place dungeon {} at {}", name, position);
1450 return {};
1451 }
1452 } catch (std::exception const& e) {
1453 throw DungeonException(strf("Error generating dungeon named '{}'", name), e);
1454 }
1455}
1456
1457pair<List<RectI>, Set<Vec2I>> DungeonGenerator::buildDungeon(Dungeon::PartConstPtr anchor, Vec2I basePos, Dungeon::DungeonGeneratorWriter* writer, bool forcePlacement) {
1458 writer->reset();

Callers

nothing calls this directly

Calls 6

errorFunction · 0.85
strfFunction · 0.85
nameMethod · 0.45
canPlaceMethod · 0.45

Tested by

no test coverage detected