plugin.gd 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. @tool
  2. extends EditorPlugin
  3. const DiscordRPCDebug = preload("res://addons/discord-rpc-gd/nodes/debug.gd")
  4. const DiscordRPCDebug_icon = preload("res://addons/discord-rpc-gd/Debug.svg")
  5. var loaded_DiscordRPCDebug = DiscordRPCDebug.new()
  6. var restart_window: ConfirmationDialog = preload("res://addons/discord-rpc-gd/restart_window.tscn").instantiate()
  7. var plugin_cfg: ConfigFile = ConfigFile.new()
  8. const plugin_data_filename = "/plugin_data.cfg"
  9. func _enter_tree() -> void:
  10. add_custom_type("DiscordRPCDebug","Node",DiscordRPCDebug,DiscordRPCDebug_icon)
  11. get_editor_interface().get_editor_settings().settings_changed.connect(_on_editor_settings_changed)
  12. func _ready() -> void:
  13. await get_tree().create_timer(0.5).timeout
  14. plugin_cfg.load(get_editor_interface().get_editor_paths().get_data_dir() + plugin_data_filename)
  15. if !get_editor_interface().get_editor_settings().has_setting("DiscordRPC/EditorPresence/enabled"):
  16. get_editor_interface().get_editor_settings().set_setting("DiscordRPC/EditorPresence/enabled",plugin_cfg.get_value("Discord","editor_presence",false))
  17. func _exit_tree():
  18. if get_editor_interface().get_editor_settings().has_setting("DiscordRPC/EditorPresence/enabled"):
  19. get_editor_interface().get_editor_settings().erase("DiscordRPC/EditorPresence/enabled")
  20. func _enable_plugin() -> void:
  21. if FileAccess.file_exists(ProjectSettings.globalize_path("res://") + "addons/discord-rpc-gd/bin/.gdignore"):
  22. DirAccess.remove_absolute(ProjectSettings.globalize_path("res://") + "addons/discord-rpc-gd/bin/.gdignore")
  23. add_autoload_singleton("DiscordRPCLoader","res://addons/discord-rpc-gd/nodes/discord_autoload.gd")
  24. restart_window.connect("confirmed", save_no_restart)
  25. restart_window.connect("canceled", save_and_restart)
  26. get_editor_interface().popup_dialog_centered(restart_window)
  27. print("IGNORE RED ERROR MESSAGES BEFORE THE SECOND RESTART!")
  28. func _disable_plugin() -> void:
  29. remove_autoload_singleton("DiscordRPCLoader")
  30. FileAccess.open("res://addons/discord-rpc-gd/bin/.gdignore",FileAccess.WRITE)
  31. remove_custom_type("DiscordRPCDebug")
  32. get_editor_interface().get_editor_settings().erase("DiscordRPC/EditorPresence/enabled")
  33. push_warning("Please restart the editor to fully disable the DiscordRPC plugin")
  34. func save_and_restart() -> void:
  35. get_editor_interface().restart_editor(true)
  36. func save_no_restart() -> void:
  37. get_editor_interface().restart_editor(false)
  38. var editor_presence: Node
  39. func _on_editor_settings_changed() -> void:
  40. plugin_cfg.set_value("Discord","editor_presence",get_editor_interface().get_editor_settings().get_setting("DiscordRPC/EditorPresence/enabled"))
  41. plugin_cfg.save(get_editor_interface().get_editor_paths().get_data_dir() + plugin_data_filename)
  42. if ClassDB.class_exists("EditorPresence") && editor_presence == null:
  43. editor_presence = ClassDB.instantiate("EditorPresence")
  44. if get_editor_interface().get_editor_settings().has_setting("DiscordRPC/EditorPresence/enabled") && get_editor_interface().get_editor_settings().get_setting("DiscordRPC/EditorPresence/enabled"):
  45. add_child(editor_presence)
  46. else:
  47. editor_presence.queue_free()