121 lines
4.1 KiB
GDScript
121 lines
4.1 KiB
GDScript
## Initializes Signal Lens plugin and its internal components
|
|
@tool
|
|
extends EditorPlugin
|
|
|
|
## Preloaded reference to the editor panel that will be added to
|
|
## Godot's debugger bottom panel
|
|
const SIGNAL_LENS_EDITOR_PANEL = preload("res://addons/signal_lens/editor/signal_lens_editor_panel.tscn")
|
|
|
|
## Name of autoload node/class that will be instantiated in the remote scene
|
|
## so we can retrieve/send data to it
|
|
const AUTOLOAD_NAME = "SignalLens"
|
|
|
|
## Debugger object that listens to Godot's callbacks
|
|
var debugger: SignalLensDebugger = null
|
|
|
|
## Inspector plugin that allows selecting remote scene nodes
|
|
var remote_node_inspector: SignalLensRemoteNodeInspector = null
|
|
|
|
## Editor panel that draws data received from remote scene
|
|
var editor_panel: SignalLensEditorPanel = null
|
|
|
|
|
|
## Setups the plugin and connects internal components
|
|
## Called on enter editor scene tree
|
|
func initialize():
|
|
# Create debugger and inspector objects
|
|
debugger = SignalLensDebugger.new()
|
|
remote_node_inspector = SignalLensRemoteNodeInspector.new()
|
|
|
|
# Register plugins in the engine
|
|
add_inspector_plugin(remote_node_inspector)
|
|
add_debugger_plugin(debugger)
|
|
|
|
# Add plugin project settings
|
|
setup_project_settings()
|
|
|
|
# Connect node selection in scene tree to backend request for
|
|
# that node's signal data
|
|
remote_node_inspector.node_selected.connect(debugger.request_node_data_from_remote)
|
|
|
|
# Create editor panel and add it to the debugger
|
|
editor_panel = SIGNAL_LENS_EDITOR_PANEL.instantiate()
|
|
debugger.setup_editor_panel(editor_panel)
|
|
|
|
# Connect data received from debugger to editor panel so data can be
|
|
# rendered in graph form
|
|
debugger.received_node_data_from_remote.connect(editor_panel.draw_node_data)
|
|
|
|
# Connect signal emissions from targeted node to editor panel
|
|
# so they can be rendered in the graph
|
|
debugger.received_signal_emission_from_remote.connect(editor_panel.draw_signal_emission)
|
|
|
|
# Connect refresh request to debugger so we can retrieve data from
|
|
# currently selected node on demand
|
|
editor_panel.node_data_requested.connect(debugger.request_node_data_from_remote)
|
|
|
|
# Connect start and stop debugging signals for editor panel setup/cleanup
|
|
debugger.started.connect(editor_panel.start_session)
|
|
debugger.stopped.connect(editor_panel.stop_session)
|
|
|
|
# Connect node selection to editor panel so line edit can reflect currently
|
|
# selected node's path
|
|
remote_node_inspector.node_selected.connect(editor_panel.assign_node_path)
|
|
|
|
|
|
## Creates and sets default values for Project Settings related to the plugin
|
|
func setup_project_settings():
|
|
# Resize on open
|
|
var setting_resize_panel_on_open = "addons/Signal Lens/resize_panel_on_open"
|
|
if not ProjectSettings.has_setting(setting_resize_panel_on_open):
|
|
ProjectSettings.set_setting(setting_resize_panel_on_open, true)
|
|
ProjectSettings.add_property_info({
|
|
"name": setting_resize_panel_on_open,
|
|
"type": TYPE_BOOL,
|
|
"hint": TYPE_BOOL,
|
|
"hint_string": TYPE_BOOL
|
|
})
|
|
ProjectSettings.set_initial_value(setting_resize_panel_on_open, true)
|
|
ProjectSettings.set_as_basic(setting_resize_panel_on_open, true)
|
|
|
|
# Resize on open
|
|
var setting_height_to_resize_to = "addons/Signal Lens/height_to_resize_to"
|
|
if not ProjectSettings.has_setting(setting_height_to_resize_to):
|
|
ProjectSettings.set_setting(setting_height_to_resize_to, 500)
|
|
ProjectSettings.add_property_info({
|
|
"name": setting_height_to_resize_to,
|
|
"type": TYPE_FLOAT,
|
|
"hint": PROPERTY_HINT_RANGE,
|
|
"hint_string": "200, 900"
|
|
})
|
|
ProjectSettings.set_initial_value(setting_height_to_resize_to, 500)
|
|
ProjectSettings.set_as_basic(setting_height_to_resize_to, true)
|
|
|
|
|
|
## Removes plugin from editor and cleans references
|
|
func cleanup():
|
|
# De-register plugins from engine
|
|
remove_debugger_plugin(debugger)
|
|
remove_inspector_plugin(remote_node_inspector)
|
|
|
|
# Remove references to initialized components
|
|
remote_node_inspector = null
|
|
debugger = null
|
|
editor_panel = null
|
|
|
|
|
|
#region Engine Callbacks
|
|
|
|
func _enter_tree() -> void:
|
|
initialize()
|
|
|
|
func _exit_tree() -> void:
|
|
cleanup()
|
|
|
|
func _enable_plugin():
|
|
add_autoload_singleton(AUTOLOAD_NAME, "res://addons/signal_lens/autoload/signal_lens_autoload.gd")
|
|
|
|
func _disable_plugin():
|
|
remove_autoload_singleton(AUTOLOAD_NAME)
|
|
|
|
#endregion
|