mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
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.
This commit is contained in:
63
Scripts/Classes/Singletons/DiscordManager.gd
Normal file
63
Scripts/Classes/Singletons/DiscordManager.gd
Normal file
@@ -0,0 +1,63 @@
|
||||
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()
|
Reference in New Issue
Block a user