| 1429 | } |
| 1430 | |
| 1431 | Maybe<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 | |
| 1457 | pair<List<RectI>, Set<Vec2I>> DungeonGenerator::buildDungeon(Dungeon::PartConstPtr anchor, Vec2I basePos, Dungeon::DungeonGeneratorWriter* writer, bool forcePlacement) { |
| 1458 | writer->reset(); |
nothing calls this directly
no test coverage detected