diff --git a/project/main.tscn b/project/main.tscn index cd80bf7..a77ea4c 100644 --- a/project/main.tscn +++ b/project/main.tscn @@ -48,6 +48,9 @@ auto_connect = true auto_token_manage = true script = ExtResource("3_h2yge") +[node name="DiscordActivity" type="DiscordActivity" parent="DiscordConnector"] +root_connector = NodePath("/root/@EditorNode@21257/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11479/@VSplitContainer@11131/@HSplitContainer@11133/@HSplitContainer@11135/@Control@11136/@SubViewportContainer@11137/@SubViewport@11138/Node/DiscordConnector") + [connection signal="user_connected" from="DiscordConnector" to="DiscordConnector" method="_on_user_connected"] [connection signal="user_connection_failed" from="DiscordConnector" to="DiscordConnector" method="_on_user_connection_failed"] [connection signal="user_update_failed" from="DiscordConnector" to="DiscordConnector" method="_on_user_update_failed"] diff --git a/src/nodes/discord_activity.cpp b/src/nodes/discord_activity.cpp new file mode 100644 index 0000000..4ab46a1 --- /dev/null +++ b/src/nodes/discord_activity.cpp @@ -0,0 +1,49 @@ +#include "discord_activity.h" + +DiscordActivity *DiscordActivity::singleton = nullptr; + +void DiscordActivity::_bind_methods() +{ + BIND_SET_GET(DiscordActivity, root_connector, Variant::NODE_PATH, godot::PROPERTY_HINT_NODE_PATH_VALID_TYPES, "DiscordConnector"); +} +DiscordActivity::DiscordActivity() +{ + singleton = this; +} +DiscordActivity::~DiscordActivity() +{ + singleton = nullptr; +} +DiscordActivity *DiscordActivity::get_singleton() +{ + return singleton; +} + +NodePath DiscordActivity::get_root_connector() +{ + return root_connector; +} + +void DiscordActivity::set_root_connector(NodePath value) +{ + root_connector = value; +} + +void DiscordActivity::_enter_tree() +{ + if (Object::cast_to(get_parent())) + { + if (root_connector.is_empty()) + { + root_connector = Object::cast_to(get_parent())->get_path(); + if (!root_connector.is_empty()) + { + connector = get_node(root_connector); + } + } + else + { + connector = get_node(root_connector); + } + } +} diff --git a/src/nodes/discord_activity.h b/src/nodes/discord_activity.h new file mode 100644 index 0000000..c6e6522 --- /dev/null +++ b/src/nodes/discord_activity.h @@ -0,0 +1,37 @@ +#ifndef DISCORD_ACTIVITY_SDK_H +#define DISCORD_ACTIVITY_SDK_H + +#include "discord_activity.h" +#include "discord_social_sdk.h" +#include "discord_connector.h" + +using namespace godot; + +class DiscordActivity : public DiscordSocialSDK +{ + GDCLASS(DiscordActivity, DiscordSocialSDK); + + static DiscordActivity *singleton; + +protected: + static void _bind_methods(); + +private: +NodePath root_connector; // Change to NodePath object + +public: + static DiscordActivity * + get_singleton(); + + DiscordConnector *connector; + + NodePath get_root_connector(); // Adjust return type + void set_root_connector(NodePath value); // Adjust parameter type + + DiscordActivity(); + ~DiscordActivity(); + + void _enter_tree() override; +}; + +#endif \ No newline at end of file diff --git a/src/register_types.cpp b/src/register_types.cpp index 649353f..13d5831 100644 --- a/src/register_types.cpp +++ b/src/register_types.cpp @@ -14,6 +14,7 @@ void initialize_DiscordUtil_module(ModuleInitializationLevel p_level) Engine::get_singleton()->register_singleton("DiscordUtil", DiscordUtil::get_singleton()); ClassDB::register_class(); ClassDB::register_class(); + ClassDB::register_class(); } } diff --git a/src/register_types.h b/src/register_types.h index aae4e63..57a4945 100644 --- a/src/register_types.h +++ b/src/register_types.h @@ -16,5 +16,6 @@ void uninitialize_DiscordUtil_module(); #include "nodes/discord_social_sdk.h" #include "nodes/editor_presence.h" #include "nodes/discord_connector.h" +#include "nodes/discord_activity.h" #endif // REGISTER_TYPES_H \ No newline at end of file