From 61fa037d0a50b62807ca88dc09e4c85dff7d3ddf Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 12 May 2025 04:00:51 +0100 Subject: Add network helpers for easily adding a chain of links --- game/network/network.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'game/network/network.cpp') 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 @@ -98,6 +98,14 @@ Network::routeFromTo(const Link::End & end, const Node::Ptr & dest) return RouteWalker().findRouteTo(end, dest); } +void +Network::add(GeoData * geoData, const std::span links) +{ + for (const auto & link : links) { + add(geoData, link); + } +} + void Network::terrainSplitAt(GenLinkDef & previous, GenLinkDef & next, GlobalPosition3D pos) { @@ -249,3 +257,20 @@ Network::create(const GeoData * geoData, const CreationDefinition & def) }); return links; } + +Link::Collection +Network::createChain(const GeoData * geoData, const std::span positions) +{ + Link::Collection out; + std::ranges::for_each(positions | std::views::pairwise, + [&out, dir = std::optional {}, 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; +} -- cgit v1.2.3