diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-05-12 04:00:51 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-05-12 04:00:51 +0100 |
commit | 61fa037d0a50b62807ca88dc09e4c85dff7d3ddf (patch) | |
tree | 1610db2106f802c0f8b9c02e9a39b9dccff1b7c0 /game/network/network.cpp | |
parent | Split link generation definitions according to terrain (diff) | |
download | ilt-61fa037d0a50b62807ca88dc09e4c85dff7d3ddf.tar.bz2 ilt-61fa037d0a50b62807ca88dc09e4c85dff7d3ddf.tar.xz ilt-61fa037d0a50b62807ca88dc09e4c85dff7d3ddf.zip |
Add network helpers for easily adding a chain of links
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; +} |