diff options
Diffstat (limited to 'game/network/network.cpp')
-rw-r--r-- | game/network/network.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/game/network/network.cpp b/game/network/network.cpp index 1c3a122..a9c9372 100644 --- a/game/network/network.cpp +++ b/game/network/network.cpp @@ -99,6 +99,14 @@ Network::routeFromTo(const Link::End & end, const Node::Ptr & dest) } void +Network::add(GeoData * geoData, const std::span<const Link::Ptr> links) +{ + for (const auto & link : links) { + add(geoData, link); + } +} + +void Network::terrainSplitAt(GenLinkDef & previous, GenLinkDef & next, GlobalPosition3D pos) { std::visit( @@ -249,3 +257,20 @@ Network::create(const GeoData * geoData, const CreationDefinition & def) }); return links; } + +Link::Collection +Network::createChain(const GeoData * geoData, const std::span<const GlobalPosition3D> positions) +{ + Link::Collection out; + std::ranges::for_each(positions | std::views::pairwise, + [&out, dir = std::optional<Angle> {}, geoData, this](const auto & current) mutable { + const auto & [previous, next] = current; + CreationDefinition def = { + .fromEnd = {.position = previous, .direction = dir}, + .toEnd = {.position = next, .direction = {}}, + }; + out += create(geoData, def); + dir = out.back()->endAt(next)->dir; + }); + return out; +} |