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
|
// StardustBridge.cpp
|
||||||
#include "StardustBridge.hpp"
|
#include "StardustBridge.hpp"
|
||||||
#include "ModelCache.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_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_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_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) {
|
if (m_fnStart && m_fnPoll && m_fnCreateNode && m_fnUpdateNode) {
|
||||||
m_bridgeHandle = h;
|
m_bridgeHandle = h;
|
||||||
std::cout << "[StardustBridge] Loaded Rust bridge: " << path << std::endl;
|
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
|
// StardustBridge.hpp
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@@ -90,6 +92,7 @@ private:
|
|||||||
using fn_set_texture_t = int(*)(std::uint64_t, const char*);
|
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_color_t = int(*)(std::uint64_t, float, float, float, float);
|
||||||
using fn_set_dimensions_t = int(*)(std::uint64_t, 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);
|
using fn_set_entity_type_t = int(*)(std::uint64_t, std::uint8_t);
|
||||||
|
|
||||||
fn_start_t m_fnStart{nullptr};
|
fn_start_t m_fnStart{nullptr};
|
||||||
@@ -102,6 +105,7 @@ private:
|
|||||||
fn_set_texture_t m_fnSetTexture{nullptr};
|
fn_set_texture_t m_fnSetTexture{nullptr};
|
||||||
fn_set_color_t m_fnSetColor{nullptr};
|
fn_set_color_t m_fnSetColor{nullptr};
|
||||||
fn_set_dimensions_t m_fnSetDimensions{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};
|
fn_set_entity_type_t m_fnSetEntityType{nullptr};
|
||||||
|
|
||||||
bool loadBridge();
|
bool loadBridge();
|
||||||
|
|||||||
Reference in New Issue
Block a user