Files
Super-Mario-Bros.-Remastere…/Scripts/Classes/Singletons/DiscordManager.gd
Jeod 1c309ce731 Modularize Discord RPC (#247)
This commit delegates all Discord-related functions to DiscordManager.gd and adds a project setting bool to toggle using Discord RPC at all. Toggling off will reduce cpu and memory overhead when Discord is not needed.
2025-09-26 14:56:44 +01:00

64 lines
1.5 KiB
GDScript

extends Node
var enabled: bool = ProjectSettings.get_setting("application/use_discord", false) and not (OS.has_feature("linux") and OS.has_feature("arm64"))
var rpc = null
class DiscordRPCStub:
var app_id
var start_timestamp
var details
var state
var large_image
var small_image
func start(): pass
func refresh(): pass
func get_is_discord_working() -> bool: return false
func shutdown(): pass
func _ready() -> void:
if enabled:
rpc = Engine.get_singleton("DiscordRPC")
else:
rpc = DiscordRPCStub.new()
setup_discord_rpc()
func _process(_delta: float) -> void:
if enabled:
rpc.run_callbacks()
func setup_discord_rpc() -> void:
if not enabled:
return
rpc.app_id = 1331261692381757562
rpc.start_timestamp = int(Time.get_unix_time_from_system())
rpc.details = "In Title Screen.."
if rpc.get_is_discord_working():
rpc.refresh()
func set_discord_status(details: String = "") -> void:
if not enabled:
return
rpc.details = details
if rpc.get_is_discord_working():
rpc.refresh()
func update_discord_status(details: String) -> void:
if not enabled:
return
rpc.details = details
rpc.state = details
rpc.large_image = (Global.level_theme + Global.theme_time).to_lower()
rpc.small_image = Global.current_campaign.to_lower()
if rpc.get_is_discord_working():
rpc.refresh()
func refresh_discord_rpc() -> void:
if not enabled:
return
if not rpc.get_is_discord_working():
return
Global.update_game_status()
update_discord_status("")
rpc.refresh()