Implement queryNodesByDistance function to retrieve node IDs within a specified distance
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user