diff --git a/project/discord_connector.gd b/project/discord_connector.gd index 512c6f7..33c3fb6 100644 --- a/project/discord_connector.gd +++ b/project/discord_connector.gd @@ -3,11 +3,14 @@ extends DiscordConnector func _on_user_connected(access_token: String, refresh_token: String, expires_in: int) -> void: print_debug("Access token: %s \nRefresh Token: %s \nExpires in: %s" % [access_token, refresh_token, expires_in]) -func _on_user_updated() -> void: - print_debug("USER UPDATED") - func _on_user_connection_failed(error: String) -> void: push_error("User connection failed! Error: " + error) func _on_user_update_failed(error: String) -> void: push_error("User update failed! Error: " + error) + +func _on_connection_ready() -> void: + print_debug("CONNECTION READY") + +func _on_connection_error(error: String) -> void: + push_error(error) diff --git a/project/main.tscn b/project/main.tscn index bd7055b..1daf306 100644 --- a/project/main.tscn +++ b/project/main.tscn @@ -1,11 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://dyc3kseph4el7"] +[gd_scene load_steps=4 format=3 uid="uid://dyc3kseph4el7"] [ext_resource type="Texture2D" uid="uid://b3qm246m7pnsx" path="res://assets/Logo_V2.png" id="2_gd222"] [ext_resource type="Script" uid="uid://kmubk5a6i385" path="res://discord_connector.gd" id="3_h2yge"] [ext_resource type="Script" uid="uid://46tue7u6crd6" path="res://addons/discord-rpc-gd/nodes/debug.gd" id="6_ujijw"] -[sub_resource type="SpriteFrames" id="SpriteFrames_h2yge"] - [node name="Node" type="Node"] [node name="ColorRect" type="ColorRect" parent="."] @@ -56,9 +54,9 @@ root_connector = NodePath("..") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] position = Vector2(789, 330.5) scale = Vector2(0.408203, 0.408203) -sprite_frames = SubResource("SpriteFrames_h2yge") +[connection signal="connection_error" from="DiscordConnector" to="DiscordConnector" method="_on_connection_error"] +[connection signal="connection_ready" from="DiscordConnector" to="DiscordConnector" method="_on_connection_ready"] [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"] -[connection signal="user_updated" from="DiscordConnector" to="DiscordConnector" method="_on_user_updated"] diff --git a/project/new_compositor.tres b/project/new_compositor.tres index 314762f..ab0452d 100644 --- a/project/new_compositor.tres +++ b/project/new_compositor.tres @@ -1,3 +1,4 @@ [gd_resource type="Compositor" format=3 uid="uid://cbg8e12ms0vvc"] [resource] +compositor_effects = Array[CompositorEffect]([null]) diff --git a/src/definitions.h b/src/definitions.h index 85d1edc..91fb7d1 100644 --- a/src/definitions.h +++ b/src/definitions.h @@ -13,4 +13,6 @@ typename std::conditional::value, int64_t, \ decltype(default_value)>::type>::type>::type -#define H_SET_GET(property_name, default_value) private: RESOLVE_TYPE(default_value) property_name = default_value; public: RESOLVE_TYPE(default_value) get_##property_name(); void set_##property_name(RESOLVE_TYPE(default_value) value); \ No newline at end of file +#define H_SET_GET(property_name, default_value) private: RESOLVE_TYPE(default_value) property_name = default_value; public: RESOLVE_TYPE(default_value) get_##property_name(); void set_##property_name(RESOLVE_TYPE(default_value) value); + +#define MAKE_RESOURCE_TYPE_HINT(m_type) vformat("%s/%s:%s", Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, m_type) \ No newline at end of file diff --git a/src/nodes/discord_activity.cpp b/src/nodes/discord_activity.cpp index 3da06d6..2375317 100644 --- a/src/nodes/discord_activity.cpp +++ b/src/nodes/discord_activity.cpp @@ -2,7 +2,10 @@ void DiscordActivity::_bind_methods() { - BIND_SET_GET(DiscordActivity, activity, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "ActivityResource"); + + ClassDB::bind_method(D_METHOD("get_activities"), &DiscordActivity::get_activities); + ClassDB::bind_method(D_METHOD("set_activities", "value"), &DiscordActivity::set_activities); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "activities", PROPERTY_HINT_ARRAY_TYPE, MAKE_RESOURCE_TYPE_HINT("ActivityResource")), "set_activities", "get_activities"); } DiscordActivity::DiscordActivity() { @@ -11,12 +14,12 @@ DiscordActivity::~DiscordActivity() { } -Ref DiscordActivity::get_activity() +TypedArray DiscordActivity::get_activities() { - return activity; + return activities; } -void DiscordActivity::set_activity(Ref value) +void DiscordActivity::set_activities(TypedArray value) { - activity = value; + activities = value; } diff --git a/src/nodes/discord_activity.h b/src/nodes/discord_activity.h index d333fae..c22a24f 100644 --- a/src/nodes/discord_activity.h +++ b/src/nodes/discord_activity.h @@ -14,9 +14,9 @@ protected: static void _bind_methods(); public: - Ref activity; - Ref get_activity(); - void set_activity(Ref value); + TypedArray activities; + TypedArray get_activities(); + void set_activities(TypedArray value); DiscordActivity(); ~DiscordActivity(); diff --git a/src/nodes/discord_connected.h b/src/nodes/discord_connected.h index ee37442..41ed89e 100644 --- a/src/nodes/discord_connected.h +++ b/src/nodes/discord_connected.h @@ -14,7 +14,7 @@ protected: static void _bind_methods(); private: -NodePath root_connector; // Change to NodePath object + NodePath root_connector; // Change to NodePath object public: DiscordConnector *connector; diff --git a/src/nodes/discord_connector.cpp b/src/nodes/discord_connector.cpp index 3f61027..6979d1c 100644 --- a/src/nodes/discord_connector.cpp +++ b/src/nodes/discord_connector.cpp @@ -12,11 +12,13 @@ void DiscordConnector::_bind_methods() BIND_METHOD(DiscordConnector, refresh_user_token, "current_refresh_token"); BIND_SIGNAL(user_connected, PropertyInfo(Variant::STRING, "access_token"), PropertyInfo(Variant::STRING, "refresh_token"), PropertyInfo(Variant::INT, "expires_in")); BIND_SIGNAL(user_connection_failed, PropertyInfo(Variant::STRING, "error")); - BIND_SIGNAL(user_updated); + BIND_SIGNAL(connection_ready); + BIND_SIGNAL(connection_error, PropertyInfo(Variant::STRING, "error")); BIND_SIGNAL(user_update_failed, PropertyInfo(Variant::STRING, "error")); BIND_SIGNAL(user_token_refreshed, PropertyInfo(Variant::STRING, "access_token"), PropertyInfo(Variant::STRING, "refresh_token"), PropertyInfo(Variant::INT, "expires_in")); BIND_SIGNAL(user_token_refresh_failed, PropertyInfo(Variant::STRING, "error")); } + DiscordConnector::DiscordConnector() { } @@ -28,6 +30,17 @@ void DiscordConnector::_ready() { client = std::make_shared(); + client->SetStatusChangedCallback([this](discordpp::Client::Status status, discordpp::Client::Error error, int32_t errorDetail) { + if (status == discordpp::Client::Status::Ready) + { + emit_signal("connection_ready"); + } + if (error != discordpp::Client::Error::None) + { + emit_signal("connection_error", String(discordpp::Client::ErrorToString(error).c_str())); + } + }); + if (Engine::get_singleton()->is_editor_hint() || editor_process) return; @@ -138,7 +151,6 @@ void DiscordConnector::connect_user() int32_t expiresIn, std::string scope) { if (result.Successful()) { - emit_signal("user_connected", accessToken.c_str(), refreshToken.c_str(), expiresIn); if (auto_token_manage) { DiscordUtil::get_singleton()->save_tokens(accessToken.c_str(), refreshToken.c_str(), expiresIn, auto_encryption_key); @@ -158,7 +170,6 @@ void DiscordConnector::update_user_token(String access_token) { if(result.Successful()) { client->Connect(); - emit_signal("user_updated"); } else { emit_signal("user_update_failed", result.Error().c_str()); } });