diff --git a/README.md b/README.md index d1506fa..c685ab1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -### This is version 1.0! In future versions there will be lobbies, invites, linux builds etc. very soon! +### This is an early version! In future versions there will be lobbies, invites, linux builds etc. very soon! Don't forget to run the following command **if you clone this project** or the godot-cpp folder will be empty ```sh git submodule update --init @@ -11,13 +11,12 @@ git submodule update --init 3. Enable the addon in your Project Settings under "Plugins" and "DiscordSDK". (if it doesn't show up reopen the project) 4. Create an Application under https://discord.com/developers/applications and get the Application ID 5. (optional) Set images under "Rich Presence" and "Art Assets" and remember the keys -6. Exporting: You need to copy the `discord_game_sdk.dll` or on linux `discord_game_sdk.so` from `res://addons/discord-sdk-gd/bin/PLATFORM/discord_game_sdk.[dll/.so]` to your exported project in the same directory as `discord_game_sdk_binding_debug.[dll/.so]` -**Known issue:** on some PCs the project will crash when Discord isn't running. This will be fixed asap! ```gdscript extends Node func _ready(): Discord_Activity.app_id = 1099618430065324082 # Application ID + print("Discord working: " + str(Discord_Activity.get_is_discord_working())) # A boolean if everything worked Discord_Activity.details = "A demo activity by vaporvee#1231" Discord_Activity.state = "Checkpoint 23/23" @@ -41,7 +40,6 @@ func _ready():
## Extra Info -- "Step 2" (enabling the addon) is needed to add `Discord_Activity.coreupdate()` to a `_process()` function with a singleton. This function is needed by pretty everything but you can it also just add it yourself. - The Discord SDK itself doesn't build under Linux for some reason (I don't have a Mac so i don't even know if it's builds under OSX) its not well documented but I try as hard as i can to get it working crossplatform but at the time its only working under Windows... (But feel free to make pull requests btw) - Its an early release some features aren't implemented only because i need a small amount of time not because it's not possible diff --git a/project/addons/discord-sdk-gd/bin/.gdignore b/project/addons/discord-sdk-gd/bin/.gdignore deleted file mode 100644 index e69de29..0000000 diff --git a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll index b91cd5b..92f73f6 100644 Binary files a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll and b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding.dll differ diff --git a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll index 581212f..3abb1c7 100644 Binary files a/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll and b/project/addons/discord-sdk-gd/bin/windows/discord_game_sdk_binding_debug.dll differ diff --git a/project/addons/discord-sdk-gd/export.gd b/project/addons/discord-sdk-gd/export.gd new file mode 100644 index 0000000..1bb5f82 --- /dev/null +++ b/project/addons/discord-sdk-gd/export.gd @@ -0,0 +1,10 @@ +@tool +extends EditorExportPlugin + +func _export_file(path, type, features): + if path[2] == "windows": + add_shared_object("res://addons/discord-sdk-gd/bin/windows/discord_game_sdk.dll",[],"/") + elif path[2] == "linux": + add_shared_object("res://addons/discord-sdk-gd/bin/linux/discord_game_sdk.so",[],"/") + elif path[2] == "macos": + add_shared_object("res://addons/discord-sdk-gd/bin/macos/discord_game_sdk.dylib",[],"/") diff --git a/project/addons/discord-sdk-gd/plugin.cfg b/project/addons/discord-sdk-gd/plugin.cfg index c403d81..80ae797 100644 --- a/project/addons/discord-sdk-gd/plugin.cfg +++ b/project/addons/discord-sdk-gd/plugin.cfg @@ -3,5 +3,5 @@ name="DiscordSDK" description="Discord Game SDK support for GDScript in Godot" author="vaporvee" -version="1.0" +version="1.1" script="plugin.gd" diff --git a/project/addons/discord-sdk-gd/plugin.gd b/project/addons/discord-sdk-gd/plugin.gd index 779ff73..077b619 100644 --- a/project/addons/discord-sdk-gd/plugin.gd +++ b/project/addons/discord-sdk-gd/plugin.gd @@ -1,9 +1,15 @@ @tool extends EditorPlugin +const ExportPlugin = preload("res://addons/discord-sdk-gd/export.gd") +var loaded_exportplugin = ExportPlugin.new() + func _enter_tree(): add_autoload_singleton("discord_coreupdater", "res://addons/discord-sdk-gd/discord_coreupdater.gd") + add_export_plugin(loaded_exportplugin) + func disable_plugin(): remove_autoload_singleton("discord_coreupdater") + remove_export_plugin(loaded_exportplugin) diff --git a/project/export_presets.cfg b/project/export_presets.cfg index f73d368..b58e3cc 100644 --- a/project/export_presets.cfg +++ b/project/export_presets.cfg @@ -8,7 +8,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../../Demo/Discord_Activity.exe" +export_path="../../demo/Discord_Activity.exe" encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false @@ -35,7 +35,7 @@ codesign/timestamp_server_url="" codesign/digest_algorithm=1 codesign/description="" codesign/custom_options=PackedStringArray() -application/modify_resources=true +application/modify_resources=false application/icon="" application/console_wrapper_icon="" application/icon_interpolation=4 diff --git a/project/main.gd b/project/main.gd index eccee93..023dc66 100644 --- a/project/main.gd +++ b/project/main.gd @@ -1,7 +1,6 @@ extends Node func _ready(): - #Discord_Activity.debug() Discord_Activity.app_id = 1099618430065324082 Discord_Activity.details = "A demo activity by vaporvee#1231" Discord_Activity.state = "Checkpoint 23/23" @@ -12,7 +11,8 @@ func _ready(): Discord_Activity.small_image_text = "Fighting the end boss! D:" Discord_Activity.start_timestamp = int(Time.get_unix_time_from_system()) - #Discord_Activity.end_timestamp = 2492978400 #31. 12. 2048 in unix time + # Discord_Activity.end_timestamp = int(Time.get_unix_time_from_system()) + 3600 # +1 hour in unix time Discord_Activity.refresh() - $Info.text = $Info.text.replace("{id}",str(Discord_Activity.app_id)).replace("{details}",Discord_Activity.details).replace("{state}",Discord_Activity.state).replace("{lkey}",Discord_Activity.large_image).replace("{ltext}",Discord_Activity.large_image_text).replace("{skey}",Discord_Activity.small_image).replace("{stext}",Discord_Activity.small_image_text).replace("{stimestamp}",str(Discord_Activity.start_timestamp)).replace("{etimestamp}",str(Discord_Activity.end_timestamp)) + + $Info.text = $Info.text.replace("{isdiscordworking}",str(Discord_Activity.get_is_discord_working())).replace("{id}",str(Discord_Activity.app_id)).replace("{details}",Discord_Activity.details).replace("{state}",Discord_Activity.state).replace("{lkey}",Discord_Activity.large_image).replace("{ltext}",Discord_Activity.large_image_text).replace("{skey}",Discord_Activity.small_image).replace("{stext}",Discord_Activity.small_image_text).replace("{stimestamp}",str(Discord_Activity.start_timestamp)).replace("{etimestamp}",str(Discord_Activity.end_timestamp)) diff --git a/project/main.tscn b/project/main.tscn index ace6d66..9eb5c86 100644 --- a/project/main.tscn +++ b/project/main.tscn @@ -46,7 +46,9 @@ offset_left = 7.0 offset_top = 6.0 offset_right = 514.0 offset_bottom = 722.0 -text = "Application ID : {id} +text = "Is Discord working: {isdiscordworking} + +Application ID : {id} Details: {details} State: {state} diff --git a/src/activity.cpp b/src/activity.cpp index e8f7792..6fd16f8 100644 --- a/src/activity.cpp +++ b/src/activity.cpp @@ -49,6 +49,8 @@ void Discord_Activity::_bind_methods() ADD_PROPERTY(PropertyInfo(Variant::INT, "end_timestamp"), "set_end_timestamp", "get_end_timestamp"); ClassDB::bind_method(D_METHOD("refresh"), &Discord_Activity::refresh); + + ClassDB::bind_method(D_METHOD("get_is_discord_working"), &Discord_Activity::get_is_discord_working); } Discord_Activity *Discord_Activity::get_singleton() @@ -70,21 +72,26 @@ Discord_Activity::~Discord_Activity() void Discord_Activity::debug() { - auto debugresult = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core); - discord::Activity debugactivity{}; - debugactivity.SetState("Test from Godot!"); - debugactivity.SetDetails("I worked months on this"); - debugactivity.GetAssets().SetLargeImage("test1"); - debugactivity.GetAssets().SetLargeText("wow test text for large image"); - debugactivity.GetAssets().SetSmallImage("godot"); - debugactivity.GetAssets().SetSmallText("wow test text for small image"); - debugactivity.GetTimestamps().SetStart(1682242800); - core->ActivityManager().UpdateActivity(debugactivity, [](discord::Result debugresult) {}); + result = discord::Core::Create(1080224638845591692, DiscordCreateFlags_NoRequireDiscord, &core); + activity.SetState("Test from Godot!"); + activity.SetDetails("I worked months on this"); + activity.GetAssets().SetLargeImage("test1"); + activity.GetAssets().SetLargeText("wow test text for large image"); + activity.GetAssets().SetSmallImage("godot"); + activity.GetAssets().SetSmallText("wow test text for small image"); + activity.GetTimestamps().SetStart(1682242800); + if (result == discord::Result::Ok) + { + core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); + } + else + UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!"); } void Discord_Activity::coreupdate() { - ::core->RunCallbacks(); + if (result == discord::Result::Ok) + ::core->RunCallbacks(); } void Discord_Activity::set_app_id(const int64_t &value) @@ -118,7 +125,10 @@ String Discord_Activity::get_details() const void Discord_Activity::refresh() { - core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); + if (result == discord::Result::Ok) + core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {}); + else + UtilityFunctions::push_warning("Discord Activity couldn't be updated. It could be that Discord isn't running!"); } void Discord_Activity::set_large_image(const String &value) @@ -175,4 +185,9 @@ void Discord_Activity::set_end_timestamp(const int64_t &value) int64_t Discord_Activity::get_end_timestamp() const { return activity.GetTimestamps().GetEnd(); +} + +bool Discord_Activity::get_is_discord_working() const +{ + return result == discord::Result::Ok; } \ No newline at end of file diff --git a/src/activity.h b/src/activity.h index 3c57678..26c972b 100644 --- a/src/activity.h +++ b/src/activity.h @@ -61,6 +61,8 @@ public: void set_start_timestamp(const int64_t &value); int64_t get_end_timestamp() const; void set_end_timestamp(const int64_t &value); + + bool get_is_discord_working() const; }; #endif \ No newline at end of file diff --git a/src/register_types.cpp b/src/register_types.cpp index 8ab7f54..1fc0ea5 100644 --- a/src/register_types.cpp +++ b/src/register_types.cpp @@ -16,7 +16,6 @@ void gdextension_initialize(ModuleInitializationLevel p_level) if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE) { ClassDB::register_class(); - discordactivity = memnew(Discord_Activity); Engine::get_singleton()->register_singleton("Discord_Activity", Discord_Activity::get_singleton()); }