summaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-10-11 22:26:25 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2022-10-11 22:26:25 +0100
commitbdf93b08301ebb43b2189249b14e149387652284 (patch)
treee7cb6b8a5b952283e323f8a7450fab3bd9cd4ecc /game
parentFix return type of network link factories (diff)
downloadilt-bdf93b08301ebb43b2189249b14e149387652284.tar.bz2
ilt-bdf93b08301ebb43b2189249b14e149387652284.tar.xz
ilt-bdf93b08301ebb43b2189249b14e149387652284.zip
Add candidateNodeAt, returns a network node why may not be part of the network
Diffstat (limited to 'game')
-rw-r--r--game/network/network.cpp9
-rw-r--r--game/network/network.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/game/network/network.cpp b/game/network/network.cpp
index 0189158..aff1aa4 100644
--- a/game/network/network.cpp
+++ b/game/network/network.cpp
@@ -35,6 +35,15 @@ Network::findNodeAt(glm::vec3 pos) const
return {};
}
+std::pair<NodePtr, bool>
+Network::candidateNodeAt(glm::vec3 pos) const
+{
+ if (const auto n = nodes.find(std::make_shared<Node>(pos)); n != nodes.end()) {
+ return {*n, true};
+ }
+ return {std::make_shared<Node>(pos), false};
+}
+
NodePtr
Network::intersectRayNodes(const Ray & ray) const
{
diff --git a/game/network/network.h b/game/network/network.h
index d561e55..79a4a2b 100644
--- a/game/network/network.h
+++ b/game/network/network.h
@@ -24,6 +24,7 @@ public:
[[nodiscard]] NodePtr findNodeAt(glm::vec3) const;
[[nodiscard]] NodePtr nodeAt(glm::vec3);
[[nodiscard]] std::pair<NodePtr, bool> newNodeAt(glm::vec3);
+ [[nodiscard]] std::pair<NodePtr, bool> candidateNodeAt(glm::vec3) const;
[[nodiscard]] virtual LinkPtr intersectRayLinks(const Ray &) const = 0;
[[nodiscard]] virtual NodePtr intersectRayNodes(const Ray &) const;