From ba6ff968dbe731376ae283d9d74fa04dab7f39a5 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 16:00:11 -0500 Subject: [PATCH] feat: add removeNode function to StardustBridge for node deletion --- src/StardustBridge.cpp | 11 +++++++++++ src/StardustBridge.hpp | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/StardustBridge.cpp b/src/StardustBridge.cpp index 69c7104..f6921d6 100644 --- a/src/StardustBridge.cpp +++ b/src/StardustBridge.cpp @@ -161,6 +161,16 @@ bool StardustBridge::updateNodeTransform(NodeId id, const glm::mat4& transform) return true; } +bool StardustBridge::removeNode(NodeId id) { + auto it = m_nodes.find(id); + if (it == m_nodes.end()) return false; + m_nodes.erase(it); + if (m_fnRemoveNode) { + (void)m_fnRemoveNode(id); + } + return true; +} + void StardustBridge::poll() { if (!m_connected) return; @@ -237,6 +247,7 @@ bool StardustBridge::loadBridge() { m_fnShutdown = reinterpret_cast(req("sdxr_shutdown")); m_fnCreateNode = reinterpret_cast(req("sdxr_create_node")); m_fnUpdateNode = reinterpret_cast(req("sdxr_update_node")); + m_fnRemoveNode = reinterpret_cast(req("sdxr_remove_node")); 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 ec1a011..76e95eb 100644 --- a/src/StardustBridge.hpp +++ b/src/StardustBridge.hpp @@ -28,6 +28,9 @@ public: // Update a node's transform. Returns false if the node doesn't exist. bool updateNodeTransform(NodeId id, const glm::mat4& transform); + // Remove a node. Returns false if the node doesn't exist. + bool removeNode(NodeId id); + // Poll compositor events and input. Non-blocking. void poll(); @@ -77,11 +80,13 @@ private: using fn_shutdown_t = void(*)(); using fn_create_node_t = std::uint64_t(*)(const char*, const float*); using fn_update_node_t = int(*)(std::uint64_t, const float*); + using fn_remove_node_t = int(*)(std::uint64_t); fn_start_t m_fnStart{nullptr}; fn_poll_t m_fnPoll{nullptr}; fn_shutdown_t m_fnShutdown{nullptr}; fn_create_node_t m_fnCreateNode{nullptr}; fn_update_node_t m_fnUpdateNode{nullptr}; + fn_remove_node_t m_fnRemoveNode{nullptr}; bool loadBridge(); };