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 | |
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')
-rw-r--r-- | game/network/network.cpp | 25 | ||||
-rw-r--r-- | game/network/network.h | 3 |
2 files changed, 28 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; +} diff --git a/game/network/network.h b/game/network/network.h index 65db016..adaae5f 100644 --- a/game/network/network.h +++ b/game/network/network.h @@ -65,7 +65,9 @@ public: [[nodiscard]] virtual float findNodeDirection(Node::AnyCPtr) const = 0; [[nodiscard]] Link::Collection create(const GeoData *, const CreationDefinition &); + [[nodiscard]] Link::Collection createChain(const GeoData *, std::span<const GlobalPosition3D>); virtual void add(GeoData *, const Link::Ptr &) = 0; + void add(GeoData *, std::span<const Link::Ptr>); [[nodiscard]] virtual const Surface * getBaseSurface() const = 0; [[nodiscard]] virtual RelativeDistance getBaseWidth() const = 0; @@ -138,6 +140,7 @@ public: using Network::create; [[nodiscard]] Link::Ptr create(const GenStraightDef &) override; [[nodiscard]] Link::Ptr create(const GenCurveDef &) override; + using Network::add; void add(GeoData *, const Link::Ptr &) override; protected: |