diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-10-13 20:00:30 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-10-13 20:00:30 +0100 |
commit | c3b032626c841e180e67aed6093397b8caafbd6c (patch) | |
tree | 96ce5b0a3998325bffd7f79cdef059f4971919dc | |
parent | Add candidateNodeAt, returns a network node why may not be part of the network (diff) | |
download | ilt-c3b032626c841e180e67aed6093397b8caafbd6c.tar.bz2 ilt-c3b032626c841e180e67aed6093397b8caafbd6c.tar.xz ilt-c3b032626c841e180e67aed6093397b8caafbd6c.zip |
Support searching node network by vec3 position
-rw-r--r-- | game/network/network.h | 2 | ||||
-rw-r--r-- | lib/sorting.hpp | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/game/network/network.h b/game/network/network.h index 79a4a2b..34e6a60 100644 --- a/game/network/network.h +++ b/game/network/network.h @@ -37,7 +37,7 @@ public: protected: static void joinLinks(const LinkPtr & l, const LinkPtr & ol); - using Nodes = std::set<NodePtr, PtrSorter<NodePtr>>; + using Nodes = std::set<NodePtr, PtrMemberSorter<NodePtr, &Node::pos>>; Nodes nodes; std::shared_ptr<Texture> texture; }; diff --git a/lib/sorting.hpp b/lib/sorting.hpp index 6b9be6a..0604aaf 100644 --- a/lib/sorting.hpp +++ b/lib/sorting.hpp @@ -1,5 +1,7 @@ #pragma once +#include <type_traits> + template<typename T> struct PtrSorter { bool operator()(const T & a, const T & b) const @@ -7,3 +9,22 @@ template<typename T> struct PtrSorter { return *a < *b; } }; + +template<typename T, auto M> struct PtrMemberSorter : public PtrSorter<T> { + using MT = std::decay_t<decltype((*T {}).*M)>; + using is_transparent = MT; + + using PtrSorter<T>::operator(); + + bool + operator()(const MT & a, const T & b) const + { + return a < (*b).*M; + } + + bool + operator()(const T & a, const MT & b) const + { + return (*a).*M < b; + } +}; |