summaryrefslogtreecommitdiff
path: root/game/network/network.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-05-12 04:00:51 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2025-05-12 04:00:51 +0100
commit61fa037d0a50b62807ca88dc09e4c85dff7d3ddf (patch)
tree1610db2106f802c0f8b9c02e9a39b9dccff1b7c0 /game/network/network.cpp
parentSplit link generation definitions according to terrain (diff)
downloadilt-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.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;
+}