diff options
Diffstat (limited to 'game/network/link.h')
-rw-r--r-- | game/network/link.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/game/network/link.h b/game/network/link.h new file mode 100644 index 0000000..0da413c --- /dev/null +++ b/game/network/link.h @@ -0,0 +1,51 @@ +#ifndef LINK_H +#define LINK_H + +#include <array> +#include <glm/glm.hpp> +#include <memory> +#include <special_members.hpp> +#include <utility> + +// 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<Node>; + +// Generic network link +// something that can be travelled along +// it joins 2 nodes +class Link { +public: + // side determines which edges can be moved to next, must alternate + using End = std::pair<NodePtr, bool /*side*/>; + + Link(End, End); + virtual ~Link() = default; + NO_COPY(Link); + NO_MOVE(Link); + + std::array<End, 2> ends; +}; + +template<typename T> struct PtrSorter { + bool + operator()(const T & a, const T & b) const + { + return *a < *b; + } +}; + +bool operator<(const glm::vec3 & a, const glm::vec3 & b); +bool operator<(const Node & a, const Node & b); + +#endif |