From 534b527f61a5f7bda160de27d6f8d08571b6afeb Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 4 Nov 2025 13:30:31 +0100 Subject: [PATCH] feat: implemented conclusion_received signal --- modules/you_done_it/client_node.cpp | 10 ++++++++++ modules/you_done_it/client_node.h | 3 +++ modules/you_done_it/ydi_client.cpp | 19 +++++++++++++++++++ modules/you_done_it/ydi_client.h | 6 ++++-- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/modules/you_done_it/client_node.cpp b/modules/you_done_it/client_node.cpp index 9760abd5..932f56a0 100644 --- a/modules/you_done_it/client_node.cpp +++ b/modules/you_done_it/client_node.cpp @@ -7,11 +7,16 @@ ClientNode *ClientNode::singleton_instance{ nullptr }; String const ClientNode::sig_connection_changed{ "connection_changed" }; +String const ClientNode::sig_conclusion_received{ "conclusion_received" }; void ClientNode::_bind_methods() { ClassDB::bind_method(D_METHOD("connect_to_server", "server_url"), &self_type::connect_to_server); ADD_SIGNAL(MethodInfo(sig_connection_changed, PropertyInfo(Variant::INT, "connected", PROPERTY_HINT_ENUM, "Disconnected,Connected,Authenticated"))); + ADD_SIGNAL(MethodInfo(sig_conclusion_received, + PropertyInfo(Variant::INT, "method", PROPERTY_HINT_ENUM, NetworkData::ClueID_hint()), + PropertyInfo(Variant::INT, "motive", PROPERTY_HINT_ENUM, NetworkData::ClueID_hint()), + PropertyInfo(Variant::INT, "murderer", PROPERTY_HINT_ENUM, NetworkData::ClueID_hint()))); } void ClientNode::enter_tree() { @@ -32,6 +37,11 @@ void ClientNode::process() { reveal_backlog(); } } + bool const new_has_conclusion{ ydi::client::receive::has_conclusion() }; + if (new_has_conclusion != this->conclusion.is_full()) { + this->conclusion = ydi::client::receive::conclusion(); + emit_signal(sig_conclusion_received, this->conclusion[0], this->conclusion[1], this->conclusion[2]); + } } void ClientNode::exit_tree() { diff --git a/modules/you_done_it/client_node.h b/modules/you_done_it/client_node.h index 60c67762..f45eca0f 100644 --- a/modules/you_done_it/client_node.h +++ b/modules/you_done_it/client_node.h @@ -1,5 +1,6 @@ #pragma once +#include "core/templates/fixed_vector.h" #include "scene/main/node.h" #include "you_done_it/ydi_networking.h" @@ -20,8 +21,10 @@ public: void connect_to_server(String const &url); private: + FixedVector conclusion; NetworkData::ConnectionStatus state{ NetworkData::CONNECTION_DISCONNECTED }; public: static String const sig_connection_changed; + static String const sig_conclusion_received; }; diff --git a/modules/you_done_it/ydi_client.cpp b/modules/you_done_it/ydi_client.cpp index 90e06016..9804e417 100644 --- a/modules/you_done_it/ydi_client.cpp +++ b/modules/you_done_it/ydi_client.cpp @@ -146,6 +146,25 @@ NetworkData::ConnectionStatus status() { } } +namespace receive { +FixedVector &conclusion() { + static FixedVector threadsafe_copy{}; + if (connection) { + threadsafe_copy = connection->conclusion; + } else { + threadsafe_copy.clear(); + } + return threadsafe_copy; +} +bool has_conclusion() { + if (!connection) { + return false; + } + std::scoped_lock lock{ connection->mtx }; + return connection->conclusion.is_full(); +} +} //namespace receive + namespace send { void reveal_clue(NetworkData::ClueID id) { if (connection) { diff --git a/modules/you_done_it/ydi_client.h b/modules/you_done_it/ydi_client.h index 4e3b40e5..5d86bde5 100644 --- a/modules/you_done_it/ydi_client.h +++ b/modules/you_done_it/ydi_client.h @@ -1,6 +1,7 @@ #pragma once #include "core/string/ustring.h" +#include "core/templates/fixed_vector.h" #include "you_done_it/ydi_networking.h" namespace ydi::client { @@ -8,8 +9,9 @@ void connect(String const &url); void disconnect(); NetworkData::ConnectionStatus status(); namespace receive { -Vector &conclusion(); -} +FixedVector &conclusion(); +bool has_conclusion(); +} //namespace receive namespace send { void reveal_clue(NetworkData::ClueID id); } //namespace send