forked from joey/godottest
90 lines
2.2 KiB
GDScript
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()
|
|
|
|
|