From 2737c0560aa8ec33561b9d14eee1c8a1893a7d34 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 16 Nov 2025 22:14:15 -0500 Subject: [PATCH] Implement queryNodesByDistance function to retrieve node IDs within a specified distance --- src/StardustBridge.cpp | 12 +++++++++++- src/StardustBridge.hpp | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/StardustBridge.cpp b/src/StardustBridge.cpp index 0c1e428..08500fe 100644 --- a/src/StardustBridge.cpp +++ b/src/StardustBridge.cpp @@ -1,3 +1,12 @@ +#include +std::vector StardustBridge::queryNodesByDistance(const glm::vec3& center, float radius, size_t maxCount) { + std::vector result; + if (!m_fnQueryNodesByDistance) return result; + std::vector ids(maxCount); + std::size_t found = m_fnQueryNodesByDistance(center.x, center.y, center.z, radius, ids.data(), maxCount); + result.assign(ids.begin(), ids.begin() + found); + return result; +} // StardustBridge.cpp #include "StardustBridge.hpp" #include "ModelCache.hpp" @@ -380,7 +389,8 @@ bool StardustBridge::loadBridge() { m_fnSetTexture = reinterpret_cast(req("sdxr_set_node_texture")); m_fnSetColor = reinterpret_cast(req("sdxr_set_node_color")); m_fnSetDimensions = reinterpret_cast(req("sdxr_set_node_dimensions")); - m_fnSetEntityType = reinterpret_cast(req("sdxr_set_node_entity_type")); + m_fnQueryNodesByDistance = reinterpret_cast(req("sdxr_query_nodes_by_distance")); + m_fnSetEntityType = reinterpret_cast(req("sdxr_set_node_entity_type")); if (m_fnStart && m_fnPoll && m_fnCreateNode && m_fnUpdateNode) { m_bridgeHandle = h; std::cout << "[StardustBridge] Loaded Rust bridge: " << path << std::endl; diff --git a/src/StardustBridge.hpp b/src/StardustBridge.hpp index 120012c..559faf1 100644 --- a/src/StardustBridge.hpp +++ b/src/StardustBridge.hpp @@ -1,3 +1,5 @@ + // Query node IDs within a distance of a point + std::vector queryNodesByDistance(const glm::vec3& center, float radius, size_t maxCount = 128); // StardustBridge.hpp #pragma once @@ -90,6 +92,7 @@ private: using fn_set_texture_t = int(*)(std::uint64_t, const char*); using fn_set_color_t = int(*)(std::uint64_t, float, float, float, float); using fn_set_dimensions_t = int(*)(std::uint64_t, float, float, float); + using fn_query_nodes_by_distance_t = std::size_t(*)(float, float, float, float, std::uint64_t*, std::size_t); using fn_set_entity_type_t = int(*)(std::uint64_t, std::uint8_t); fn_start_t m_fnStart{nullptr}; @@ -102,6 +105,7 @@ private: fn_set_texture_t m_fnSetTexture{nullptr}; fn_set_color_t m_fnSetColor{nullptr}; fn_set_dimensions_t m_fnSetDimensions{nullptr}; + fn_query_nodes_by_distance_t m_fnQueryNodesByDistance{nullptr}; fn_set_entity_type_t m_fnSetEntityType{nullptr}; bool loadBridge();