Merge pull request #1 from vaporvee/dev

Version 1.1
This commit is contained in:
Yannik
2023-04-25 19:45:44 +02:00
committed by GitHub
13 changed files with 56 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
<img src="https://github.com/vaporvee/discord-sdk-godot/blob/main/project/assets/Banner_v1.png?raw=true">
### 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():
<br />
## 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

View File

@@ -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",[],"/")

View File

@@ -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"

View File

@@ -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)

View File

@@ -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

View File

@@ -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))

View File

@@ -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}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -16,7 +16,6 @@ void gdextension_initialize(ModuleInitializationLevel p_level)
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE)
{
ClassDB::register_class<Discord_Activity>();
discordactivity = memnew(Discord_Activity);
Engine::get_singleton()->register_singleton("Discord_Activity", Discord_Activity::get_singleton());
}