From f5df1cb82a873e63090ba8395af3292582513d96 Mon Sep 17 00:00:00 2001 From: Yannik <80621863+vaporvee@users.noreply.github.com> Date: Fri, 5 May 2023 16:10:05 +0200 Subject: [PATCH] Add custom activity structure type to GDScript --- src/discordgodot.cpp | 29 ++++++++++++++-------------- src/discordgodot.h | 43 +++++++++++++++++++++++++++++------------- src/register_types.cpp | 4 ++++ 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/src/discordgodot.cpp b/src/discordgodot.cpp index 94195e7..ef733ad 100644 --- a/src/discordgodot.cpp +++ b/src/discordgodot.cpp @@ -1,5 +1,4 @@ #include "discordgodot.h" -#include "lib/discord_game_sdk/cpp/discord.h" #include #include #include @@ -9,11 +8,6 @@ using namespace godot; Discord_SDK *Discord_SDK::singleton = nullptr; -discord::Core *core{}; -discord::Result result; -discord::Activity sdkactivity{}; -discord::User user{}; - void Discord_SDK::_bind_methods() { ClassDB::bind_method(D_METHOD("debug"), &Discord_SDK::debug); @@ -22,15 +16,12 @@ void Discord_SDK::_bind_methods() ClassDB::bind_method(D_METHOD("get_app_id"), &Discord_SDK::get_app_id); ClassDB::bind_method(D_METHOD("set_app_id", "app_id"), &Discord_SDK::set_app_id); ADD_PROPERTY(PropertyInfo(Variant::INT, "app_id"), "set_app_id", "get_app_id"); -<<<<<<< HEAD ClassDB::bind_method(D_METHOD("get_activity"), &Discord_SDK::get_activity); ClassDB::bind_method(D_METHOD("set_activity", "activity"), &Discord_SDK::set_activity); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "activity"), "set_activity", "get_activity") - == == == = ->>>>>>> 3047e47 (constructed custom activity struct) + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "activity"), "set_activity", "get_activity"); - ClassDB::bind_method(D_METHOD("get_is_discord_working"), &Discord_SDK::get_is_discord_working); + ClassDB::bind_method(D_METHOD("get_is_discord_working"), &Discord_SDK::get_is_discord_working); ClassDB::bind_method(D_METHOD("get_result_int"), &Discord_SDK::get_result_int); @@ -91,9 +82,17 @@ int64_t Discord_SDK::get_app_id() const return app_id; } -void Discord_SDK::set_activity(const activitystruct &value) -{ - activity = value; +void Discord_SDK::set_activity(const Object &value) +{ /* + activity.state = value.state; + activity.details = value.details; + activity.large_image = value.large_image; + activity.large_image = value.large_image_text; + activity.large_image = value.small_image; + activity.large_image = value.small_image_text; + activity.start_timestamp = value.start_timestamp; + activity.end_timestamp = value.end_timestamp;*/ + sdkactivity.SetState(activity.state.utf8().get_data()); sdkactivity.SetDetails(activity.details.utf8().get_data()); sdkactivity.GetAssets().SetLargeImage(activity.large_image.utf8().get_data()); @@ -103,7 +102,7 @@ void Discord_SDK::set_activity(const activitystruct &value) sdkactivity.GetTimestamps().SetStart(activity.start_timestamp); sdkactivity.GetTimestamps().SetEnd(activity.end_timestamp); } -Discord_SDK::activitystruct Discord_SDK::get_activity() const +Object Discord_SDK::get_activity() const { return activity; } diff --git a/src/discordgodot.h b/src/discordgodot.h index 2fcea5d..8afba50 100644 --- a/src/discordgodot.h +++ b/src/discordgodot.h @@ -3,15 +3,20 @@ #include #include "lib/discord_game_sdk/cpp/discord.h" +#include #include #include using namespace godot; -class Discord_SDK : public Object -{ - GDCLASS(Discord_SDK, Object); +discord::Core *core{}; +discord::Result result; +discord::Activity sdkactivity{}; +discord::User user{}; +class Discord_SDK : public RefCounted +{ + GDCLASS(Discord_SDK, RefCounted); static Discord_SDK *singleton; protected: @@ -20,8 +25,27 @@ protected: private: int64_t app_id; - struct activitystruct +public: + static Discord_SDK * + get_singleton(); + + Discord_SDK(); + ~Discord_SDK(); + + class activitystruct : public Object { + GDCLASS(activitystruct, Object); + + protected: + static void _bind_methods(); + + public: + static activitystruct * + get_singleton(); + + activitystruct(); + ~activitystruct(); + String state; String details; @@ -35,13 +59,6 @@ private: }; activitystruct activity; -public: - static Discord_SDK * - get_singleton(); - - Discord_SDK(); - ~Discord_SDK(); - void debug(); void coreupdate(); void refresh(); @@ -49,8 +66,8 @@ public: int64_t get_app_id() const; void set_app_id(const int64_t &value); - void set_activity(const activitystruct &value); - activitystruct get_activity() const; + void set_activity(const Object &value); + Object get_activity() const; bool get_is_discord_working() const; int get_result_int() const; diff --git a/src/register_types.cpp b/src/register_types.cpp index 6eb1f07..64fc776 100644 --- a/src/register_types.cpp +++ b/src/register_types.cpp @@ -10,13 +10,16 @@ using namespace godot; static Discord_SDK *discordsdk; +static Discord_SDK::activitystruct *discordsdkactivity; void gdextension_initialize(ModuleInitializationLevel p_level) { if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE) { ClassDB::register_class(); + ClassDB::register_class(); discordsdk = memnew(Discord_SDK); + discordsdkactivity = memnew(Discord_SDK::activitystruct); Engine::get_singleton()->register_singleton("Discord_SDK", Discord_SDK::get_singleton()); } } @@ -27,6 +30,7 @@ void gdextension_terminate(ModuleInitializationLevel p_level) { Engine::get_singleton()->unregister_singleton("Discord_SDK"); memdelete(discordsdk); + memdelete(discordsdkactivity); } }