Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

90 lines
2.2 KiB
GDScript

@tool
class_name PankuConsolePlugin
extends EditorPlugin
const SINGLETON_NAME = "Panku"
const SINGLETON_PATH = "res://addons/panku_console/console.tscn"
const SINGLETON_OPTION = "autoload/" + SINGLETON_NAME
var exporter: PankuExporter
# Custom export plugin to automatically disable console in release builds
class PankuExporter extends EditorExportPlugin:
const NAME = "PankuReleaseExporter"
var owner: EditorPlugin
var need_restore_singleton: bool
func _get_name() -> String:
# Have no clue where this name will be used
# It just should be implemented according the docs
return NAME
func _export_begin(_features: PackedStringArray, is_debug: bool, _path: String, _flags: int) -> void:
need_restore_singleton = false
var disable_activated: bool = ProjectSettings.get_setting(
PankuConfig.panku_option(PankuConfig.OPTIONS.DISABLE_ON_RELEASE)
)
if not is_debug and disable_activated:
need_restore_singleton = ProjectSettings.has_setting(SINGLETON_OPTION)
owner.safe_remove_singleton()
func _export_end() -> void:
if need_restore_singleton:
owner.safe_add_singleton()
func _enable_exporter() -> void:
if not exporter:
# See https://github.com/godotengine/godot/issues/73525
exporter = (PankuExporter as Variant).new()
exporter.owner = self
add_export_plugin(exporter)
func _disable_exporter() -> void:
if exporter:
remove_export_plugin(exporter)
# Adding singleton with preliminary check to avoid any conflicts.
func safe_add_singleton() -> void:
if not ProjectSettings.has_setting(SINGLETON_OPTION):
add_autoload_singleton(SINGLETON_NAME, SINGLETON_PATH)
# Removing singleton with preliminary check to avoid any conflicts.
func safe_remove_singleton() -> void:
if ProjectSettings.has_setting(SINGLETON_OPTION):
remove_autoload_singleton(SINGLETON_NAME)
func _enable_plugin() -> void:
safe_add_singleton()
print("[Panku Console] enabled.")
func _disable_plugin() -> void:
safe_remove_singleton()
PankuConfig.clear_all_project_settings()
print("[Panku Console] disabled.")
func _enter_tree() -> void:
PankuConfig.init_all_project_settings()
_enable_exporter()
print("[Panku Console] initialized! Project page: https://github.com/Ark2000/PankuConsole")
func _exit_tree() -> void:
_disable_exporter()