summaryrefslogtreecommitdiff
path: root/game/network/network.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/network/network.cpp')
-rw-r--r--game/network/network.cpp25
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;
+}