84 lines
1.8 KiB
GDScript
84 lines
1.8 KiB
GDScript
@tool
|
|
|
|
class_name DMDebuggerPlugin extends EditorDebuggerPlugin
|
|
|
|
|
|
const DebuggerView: PackedScene = preload("./views/debugger_view.tscn")
|
|
|
|
|
|
var debugger_view: DMDebuggerView
|
|
var debug_info: Dictionary = {}
|
|
|
|
|
|
func _setup_session(session_id: int) -> void:
|
|
var session: EditorDebuggerSession = get_session(session_id)
|
|
session.started.connect(_on_started)
|
|
session.breaked.connect(_on_breaked)
|
|
session.continued.connect(_on_continued)
|
|
session.stopped.connect(_on_stopped)
|
|
|
|
debugger_view = DebuggerView.instantiate()
|
|
debugger_view.name = DMConstants.translate("Dialogue")
|
|
debugger_view.session = session
|
|
session.add_session_tab(debugger_view)
|
|
|
|
|
|
func _has_capture(capture: String) -> bool:
|
|
return capture == "dm"
|
|
|
|
|
|
func _capture(message: String, data: Array, _session_id: int) -> bool:
|
|
match message:
|
|
"dm:debug":
|
|
debug_info = data[0]
|
|
return true
|
|
|
|
"dm:current_scene":
|
|
debugger_view.current_scene = data[0]
|
|
return true
|
|
|
|
"dm:state":
|
|
debugger_view.contexts = data[0]
|
|
debugger_view.autoloads = data[1]
|
|
return true
|
|
|
|
"dm:get_line":
|
|
debugger_view.add_line(data[0])
|
|
return true
|
|
|
|
return false
|
|
|
|
|
|
#region Signals
|
|
|
|
|
|
func _on_started() -> void:
|
|
debugger_view.start()
|
|
debug_info = {}
|
|
|
|
|
|
func _on_breaked(_can_debug: bool) -> void:
|
|
if debug_info.is_empty(): return
|
|
|
|
DMPlugin.open_file_at_line(debug_info.resource_path, debug_info.line_number)
|
|
|
|
await (Engine.get_main_loop() as SceneTree).create_timer(1).timeout
|
|
|
|
EditorInterface.set_main_screen_editor("Dialogue")
|
|
DMPlugin.instance.main_view.code_edit.runtime_error = DMError.new({
|
|
line_number = debug_info.line_number + 1
|
|
})
|
|
|
|
debug_info = {}
|
|
|
|
|
|
func _on_continued() -> void:
|
|
DMPlugin.instance.main_view.code_edit.runtime_error = null
|
|
debug_info = {}
|
|
|
|
|
|
func _on_stopped() -> void:
|
|
debugger_view.stop()
|
|
DMPlugin.instance.main_view.code_edit.runtime_error = null
|
|
debug_info = {}
|