#ifndef LINK_H #define LINK_H #include #include #include #include #include #include #include // Generic network node // something that can be travelled to // it has location class Node { public: explicit Node(glm::vec3 p) noexcept : pos(p) {}; virtual ~Node() noexcept = default; NO_COPY(Node); NO_MOVE(Node); glm::vec3 pos; }; using NodePtr = std::shared_ptr; // Generic network link // something that can be travelled along // it joins 2 nodes class Link; using LinkPtr = std::shared_ptr; class Link { public: using End = std::pair; Link(End, End, float); virtual ~Link() = default; NO_COPY(Link); NO_MOVE(Link); virtual Transform positionAt(float dist, unsigned char start) const = 0; std::array ends; float length; using Next = std::pair; std::array, 2> nexts; }; bool operator<(const glm::vec3 & a, const glm::vec3 & b); bool operator<(const Node & a, const Node & b); #endif