From acb76ffa0f45c5369e103f8868356d333ab2d954 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 11 May 2025 12:22:19 +0100 Subject: Build networks with new interface --- application/main.cpp | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'application/main.cpp') diff --git a/application/main.cpp b/application/main.cpp index a0c87c0..d96b188 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -1,6 +1,5 @@ #include "ui/mainApplication.h" #include "ui/mainWindow.h" -#include #include #include #include @@ -30,9 +29,6 @@ #include #include #include -#include -#include -#include #include #include @@ -50,7 +46,7 @@ public: assets = AssetFactory::loadAll("res"); { - auto rl = world.create(); + auto railLinks = world.create(); const auto nodes = materializeRange(std::vector { {315103000, 491067000}, {315977000, 490777000}, @@ -60,31 +56,26 @@ public: {316129566, 490893054}, {315825622, 490833929}, {315106182, 491073714}, + {314955393, 490999023}, } | std::views::transform([this](const auto n) { return terrain->positionAt(n); })); - auto l3 = BuilderStraight {}.create(rl.get(), terrain.get(), *nodes.begin(), *++nodes.begin()).front(); - for (const auto & [from, to] : nodes | std::views::drop(1) | std::views::pairwise) { - const auto links = BuilderFreeExtend {}.createExtend(rl.get(), terrain.get(), from, to); - } - for (const auto & [from, to] : std::initializer_list> { - {{315103000, 491067000}, {315003434, 491076253}}, - {{315103000, 491067000}, {315016495, 491019224}}, - {{315016495, 491019224}, {314955393, 490999023}}, - }) { - const auto links = BuilderFreeExtend {}.createExtend( - rl.get(), terrain.get(), terrain->positionAt(from), terrain->positionAt(to)); - } - for (const auto & [from, to] : std::initializer_list> { - {{315106182, 491073714}, {314955393, 490999023}}, - }) { - auto p1 = rl->intersectRayNodes({from || 0, up})->pos; - auto p2 = rl->intersectRayNodes({to || 0, up})->pos; - const auto links = BuilderFreeExtend {}.createJoin(rl.get(), terrain.get(), p1, p2); + + Link::Ptr l3; + for (std::optional previousDir; const auto [fromPos, toPos] : std::views::pairwise(nodes)) { + const auto links = railLinks->create({ + .fromEnd = {.position = fromPos, .direction = previousDir}, + .toEnd = {.position = toPos, .direction = std::nullopt}, + }); + for (const auto & link : links) { + railLinks->add(terrain.get(), link); + } + l3 = links.back(); + previousDir = links.back()->endAt(toPos)->dir; } - const std::shared_ptr train = world.create(l3, 800000); + const std::shared_ptr train = world.create(l3, 0); auto b47 = assets.at("brush-47").dynamicCast(); for (int N = 0; N < 6; N++) { train->create(b47); -- cgit v1.2.3