summaryrefslogtreecommitdiff
path: root/ui/builders
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 /ui/builders
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 'ui/builders')
-rw-r--r--ui/builders/freeExtend.cpp22
-rw-r--r--ui/builders/freeExtend.h6
-rw-r--r--ui/builders/join.cpp12
-rw-r--r--ui/builders/join.h3
-rw-r--r--ui/builders/straight.cpp11
-rw-r--r--ui/builders/straight.h5
6 files changed, 46 insertions, 13 deletions
diff --git a/ui/builders/freeExtend.cpp b/ui/builders/freeExtend.cpp
index db127e6..ab5a998 100644
--- a/ui/builders/freeExtend.cpp
+++ b/ui/builders/freeExtend.cpp
@@ -38,11 +38,11 @@ BuilderFreeExtend::click(
case SDL_BUTTON_LEFT:
if (p1) {
if (const auto p = network->intersectRayNodes(ray)) {
- network->addJoins(*p1, p->pos);
+ createJoin(network, geoData, *p1, p->pos);
p1 = p->pos;
}
else if (const auto p = geoData->intersectRay(ray)) {
- network->addExtend(*p1, p->first);
+ createExtend(network, geoData, *p1, p->first);
p1 = p->first;
}
}
@@ -57,3 +57,21 @@ BuilderFreeExtend::click(
return;
}
}
+
+Link::CCollection
+BuilderFreeExtend::createJoin(
+ Network * network, const GeoData * geoData, GlobalPosition3D p1, GlobalPosition3D p2) const
+{
+ const auto links = network->addJoins(geoData, p1, p2);
+ setHeightsFor(network, links);
+ return links;
+}
+
+Link::CCollection
+BuilderFreeExtend::createExtend(
+ Network * network, const GeoData * geoData, GlobalPosition3D p1, GlobalPosition3D p2) const
+{
+ const auto links = network->addExtend(geoData, p1, p2);
+ setHeightsFor(network, links);
+ return links;
+}
diff --git a/ui/builders/freeExtend.h b/ui/builders/freeExtend.h
index 0d5f327..6f28493 100644
--- a/ui/builders/freeExtend.h
+++ b/ui/builders/freeExtend.h
@@ -5,11 +5,17 @@ class Network;
class GeoData;
class BuilderFreeExtend : public EditNetwork::Builder {
+private:
std::string hint() const override;
void click(Network * network, const GeoData * geoData, const SDL_MouseButtonEvent & e,
const Ray<GlobalPosition3D> & ray) override;
void move(Network * network, const GeoData * geoData, const SDL_MouseMotionEvent & e,
const Ray<GlobalPosition3D> & ray) override;
+public:
+ Link::CCollection createJoin(Network * network, const GeoData *, GlobalPosition3D, GlobalPosition3D) const;
+ Link::CCollection createExtend(Network * network, const GeoData *, GlobalPosition3D, GlobalPosition3D) const;
+
+private:
std::optional<GlobalPosition3D> p1;
};
diff --git a/ui/builders/join.cpp b/ui/builders/join.cpp
index 7474c5b..6941e23 100644
--- a/ui/builders/join.cpp
+++ b/ui/builders/join.cpp
@@ -25,13 +25,13 @@ BuilderJoin::move(Network * network, const GeoData *, const SDL_MouseMotionEvent
void
BuilderJoin::click(
- Network * network, const GeoData *, const SDL_MouseButtonEvent & e, const Ray<GlobalPosition3D> & ray)
+ Network * network, const GeoData * geoData, const SDL_MouseButtonEvent & e, const Ray<GlobalPosition3D> & ray)
{
switch (e.button) {
case SDL_BUTTON_LEFT:
if (const auto p = network->intersectRayNodes(ray)) {
if (p1) {
- create(network, p1, p);
+ create(network, geoData, p1, p);
p1.reset();
candidateLinks.removeAll();
}
@@ -46,8 +46,10 @@ BuilderJoin::click(
}
}
-void
-BuilderJoin::create(Network * network, const Node::Ptr & p1, const Node::Ptr & p2) const
+Link::CCollection
+BuilderJoin::create(Network * network, const GeoData * geoData, const Node::Ptr & p1, const Node::Ptr & p2) const
{
- network->addJoins(p1->pos, p2->pos);
+ const auto links = network->addJoins(geoData, p1->pos, p2->pos);
+ setHeightsFor(network, links);
+ return links;
}
diff --git a/ui/builders/join.h b/ui/builders/join.h
index dd57895..326d23d 100644
--- a/ui/builders/join.h
+++ b/ui/builders/join.h
@@ -5,13 +5,14 @@ class Network;
class GeoData;
class BuilderJoin : public EditNetwork::Builder {
+private:
std::string hint() const override;
void click(Network * network, const GeoData * geoData, const SDL_MouseButtonEvent & e,
const Ray<GlobalPosition3D> & ray) override;
void move(Network * network, const GeoData * geoData, const SDL_MouseMotionEvent & e,
const Ray<GlobalPosition3D> & ray) override;
- void create(Network * network, const Node::Ptr & p1, const Node::Ptr & p2) const;
+ Link::CCollection create(Network * network, const GeoData *, const Node::Ptr & p1, const Node::Ptr & p2) const;
Node::Ptr p1;
};
diff --git a/ui/builders/straight.cpp b/ui/builders/straight.cpp
index 43f5ec8..338aa8a 100644
--- a/ui/builders/straight.cpp
+++ b/ui/builders/straight.cpp
@@ -1,4 +1,5 @@
#include "straight.h"
+#include "stream_support.h"
#include <game/geoData.h>
std::string
@@ -32,7 +33,7 @@ BuilderStraight::click(
case SDL_BUTTON_LEFT:
if (const auto p = geoData->intersectRay(ray)) {
if (p1) {
- create(network, *p1, p->first);
+ create(network, geoData, *p1, p->first);
candidateLinks.removeAll();
p1.reset();
}
@@ -48,8 +49,10 @@ BuilderStraight::click(
}
}
-void
-BuilderStraight::create(Network * network, GlobalPosition3D p1, GlobalPosition3D p2) const
+Link::CCollection
+BuilderStraight::create(Network * network, const GeoData * geoData, GlobalPosition3D p1, GlobalPosition3D p2) const
{
- network->addStraight(p1, p2);
+ const auto links = network->addStraight(geoData, p1, p2);
+ setHeightsFor(network, links);
+ return links;
}
diff --git a/ui/builders/straight.h b/ui/builders/straight.h
index 28eb66e..0a6f290 100644
--- a/ui/builders/straight.h
+++ b/ui/builders/straight.h
@@ -5,13 +5,16 @@ class Network;
class GeoData;
class BuilderStraight : public EditNetwork::Builder {
+private:
std::string hint() const override;
void click(Network * network, const GeoData * geoData, const SDL_MouseButtonEvent & e,
const Ray<GlobalPosition3D> & ray) override;
void move(Network * network, const GeoData * geoData, const SDL_MouseMotionEvent & e,
const Ray<GlobalPosition3D> & ray) override;
- void create(Network * network, GlobalPosition3D p1, GlobalPosition3D p2) const;
+public:
+ Link::CCollection create(Network * network, const GeoData *, GlobalPosition3D p1, GlobalPosition3D p2) const;
+private:
std::optional<GlobalPosition3D> p1;
};