summaryrefslogtreecommitdiff
path: root/application/main.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-02-24 01:28:14 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2025-02-24 01:28:14 +0000
commitef08a08617a1541d8aa1862d8bcfe049dcb57998 (patch)
treeabfcb0e0146a29deead395b0a730acaf8b01dc47 /application/main.cpp
parentMerge branch 'terrain-deform-2' (diff)
parentNew hardcoded test rail network (diff)
downloadilt-ef08a08617a1541d8aa1862d8bcfe049dcb57998.tar.bz2
ilt-ef08a08617a1541d8aa1862d8bcfe049dcb57998.tar.xz
ilt-ef08a08617a1541d8aa1862d8bcfe049dcb57998.zip
Merge remote-tracking branch 'origin/terrain-for-networks'
Diffstat (limited to 'application/main.cpp')
-rw-r--r--application/main.cpp74
1 files changed, 44 insertions, 30 deletions
diff --git a/application/main.cpp b/application/main.cpp
index db42a63..723f3d2 100644
--- a/application/main.cpp
+++ b/application/main.cpp
@@ -11,6 +11,7 @@
#include <game/network/link.h>
#include <game/network/rail.h>
#include <game/objective.h>
+#include <game/objectives/freeroam.h>
#include <game/objectives/goto.h>
#include <game/orders.h>
#include <game/scenary/foliage.h>
@@ -25,8 +26,13 @@
#include <glm/gtx/transform.hpp> // IWYU pragma: keep
#include <memory>
#include <random>
+#include <ranges>
#include <special_members.h>
+#include <stream_support.h>
#include <ui/applicationBase.h>
+#include <ui/builders/freeExtend.h>
+#include <ui/builders/join.h>
+#include <ui/builders/straight.h>
#include <ui/gameMainWindow.h>
#include <ui/window.h>
@@ -38,46 +44,54 @@ public:
int
run()
{
- geoData = std::make_shared<GeoData>(GeoData::loadFromAsciiGrid("test/fixtures/height/SD19.asc"));
-
windows.create<MainWindow>(DISPLAY_WIDTH, DISPLAY_HEIGHT)->setContent<GameMainWindow>();
- world.create<Terrain>(geoData);
- world.create<Water>(geoData);
+ terrain = world.create<Terrain>(GeoData::loadFromAsciiGrid("test/fixtures/height/SD19.asc"));
+ world.create<Water>(terrain);
assets = AssetFactory::loadAll("res");
{
auto rl = world.create<RailLinks>();
- const GlobalPosition3D j {-1120000, -1100000, 3000}, k {-1100000, -1000000, 15000},
- l {-1000000, -800000, 20000}, m {-900000, -600000, 30000}, n {-600000, -500000, 32000},
- o {-500000, -800000, 30000}, p {-600000, -900000, 25000}, q {-1025000, -1175000, 10000},
- r {-925000, -1075000, 10000}, s {-1100000, -500000, 15000}, t {-1100000, -450000, 15000},
- u {-1000000, -400000, 15000};
- auto l3 = rl->addLinksBetween(j, k);
- rl->addLinksBetween(k, l);
- rl->addLinksBetween(l, m);
- rl->addLinksBetween(m, n);
- rl->addLinksBetween(n, o);
- rl->addLinksBetween(o, p);
- // branch 1
- rl->addLinksBetween(p, q);
- rl->addLinksBetween(q, j);
- // branch 2
- rl->addLinksBetween(p, r);
- rl->addLinksBetween(r, j);
- // early loop
- rl->addLinksBetween(s, t);
- rl->addLinksBetween(l, s);
- rl->addLinksBetween(t, u);
- rl->addLinksBetween(u, m);
- const std::shared_ptr<Train> train = world.create<Train>(l3);
+ const auto nodes = materializeRange(std::vector<GlobalPosition2D> {
+ {315103000, 491067000},
+ {315977000, 490777000},
+ {316312000, 490557000},
+ {316885000, 491330000},
+ {316510934, 491255979},
+ {316129566, 490893054},
+ {315825622, 490833929},
+ {315106182, 491073714},
+ }
+ | 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<std::pair<GlobalPosition2D, GlobalPosition2D>> {
+ {{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<std::pair<GlobalPosition2D, GlobalPosition2D>> {
+ {{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);
+ }
+
+ const std::shared_ptr<Train> train = world.create<Train>(l3, 800000);
auto b47 = std::dynamic_pointer_cast<RailVehicleClass>(assets.at("brush-47"));
for (int N = 0; N < 6; N++) {
train->create<RailVehicle>(b47);
}
train->orders.removeAll();
- train->orders.create<GoTo>(
- &train->orders, l3->ends[1], l3->length, rl->findNodeAt({-1100000, -450000, 15000}));
+ train->orders.create<FreeRoam>(&train->orders);
train->currentActivity = train->orders.current()->createActivity();
std::random_device randomdev {};
@@ -89,7 +103,7 @@ public:
for (auto y = 491100000; y < 491130000; y += 5000) {
world.create<Plant>(std::dynamic_pointer_cast<Foliage>(assets.at(std::format("Tree-{:#02}-{}",
treeDistribution(randomdev), treeVariantDistribution(randomdev)))),
- Location {geoData->positionAt({{x + positionOffsetDistribution(randomdev),
+ Location {terrain->positionAt({{x + positionOffsetDistribution(randomdev),
y + positionOffsetDistribution(randomdev)}}),
{0, rotationDistribution(randomdev), 0}});
}