Implement queryNodesByDistance function to retrieve node IDs within a specified distance

This commit is contained in:
MayaTheShy
2025-11-16 22:14:15 -05:00
parent 4a3766b00c
commit 2737c0560a
2 changed files with 15 additions and 1 deletions

View File

@@ -1,3 +1,12 @@
#include <array>
std::vector<StardustBridge::NodeId> StardustBridge::queryNodesByDistance(const glm::vec3& center, float radius, size_t maxCount) {
std::vector<NodeId> result;
if (!m_fnQueryNodesByDistance) return result;
std::vector<std::uint64_t> 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<fn_set_texture_t>(req("sdxr_set_node_texture"));
m_fnSetColor = reinterpret_cast<fn_set_color_t>(req("sdxr_set_node_color"));
m_fnSetDimensions = reinterpret_cast<fn_set_dimensions_t>(req("sdxr_set_node_dimensions"));
m_fnSetEntityType = reinterpret_cast<fn_set_entity_type_t>(req("sdxr_set_node_entity_type"));
m_fnQueryNodesByDistance = reinterpret_cast<fn_query_nodes_by_distance_t>(req("sdxr_query_nodes_by_distance"));
m_fnSetEntityType = reinterpret_cast<fn_set_entity_type_t>(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;

View File

@@ -1,3 +1,5 @@
// Query node IDs within a distance of a point
std::vector<NodeId> 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();