diff options
-rw-r--r-- | game/network/network.h | 8 | ||||
-rw-r--r-- | game/network/rail.h | 4 | ||||
-rw-r--r-- | test/test-network.cpp | 2 |
3 files changed, 14 insertions, 0 deletions
diff --git a/game/network/network.h b/game/network/network.h index 44ad095..c0485a9 100644 --- a/game/network/network.h +++ b/game/network/network.h @@ -30,6 +30,8 @@ public: [[nodiscard]] Link::Nexts routeFromTo(const Link::End &, glm::vec3) const; [[nodiscard]] Link::Nexts routeFromTo(const Link::End &, const NodePtr &) const; + virtual LinkPtr addStraight(glm::vec3, glm::vec3) = 0; + protected: static void joinLinks(const LinkPtr & l, const LinkPtr & ol); @@ -60,5 +62,11 @@ public: return l; } + LinkPtr + addStraight(glm::vec3 n1, glm::vec3 n2) override + { + return addLink<typename T::StraightLink>(n1, n2); + } + void render(const Shader &) const override; }; diff --git a/game/network/rail.h b/game/network/rail.h index 758beb6..c1cb579 100644 --- a/game/network/rail.h +++ b/game/network/rail.h @@ -16,10 +16,14 @@ class Vertex; struct Arc; // A piece of rail track +class RailLinkStraight; class RailLink : public virtual Link, public Renderable { public: RailLink() = default; inline ~RailLink() override = 0; + + using StraightLink = RailLinkStraight; + void render(const Shader &) const override; NO_COPY(RailLink); NO_MOVE(RailLink); diff --git a/test/test-network.cpp b/test/test-network.cpp index 70f2428..af2c76e 100644 --- a/test/test-network.cpp +++ b/test/test-network.cpp @@ -19,7 +19,9 @@ #include <vector> struct TestLink : public LinkStraight { + TestLink(NodePtr a, NodePtr b) : TestLink {a, b, glm::distance(a->pos, b->pos)} { } TestLink(NodePtr a, NodePtr b, float l) : Link {{std::move(a), 0}, {std::move(b), pi}, l} { } + using StraightLink = TestLink; }; constexpr glm::vec3 p000 {0, 0, 0}, p100 {1, 0, 0}, p200 {2, 0, 0}, p300 {3, 0, 0}; |