|  |  |  | @tool | 
					
						
							|  |  |  | extends EditorDebuggerPlugin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const DebuggerTab := preload("debugger_tab.gd") | 
					
						
							|  |  |  | var debugger_tab := DebuggerTab.new() | 
					
						
							|  |  |  | var floating_window: Window | 
					
						
							|  |  |  | var session: EditorDebuggerSession | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _has_capture(prefix: String) -> bool: | 
					
						
							|  |  |  |     return prefix == "beehave" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _capture(message: String, data: Array, session_id: int) -> bool: | 
					
						
							|  |  |  |     # in case the behavior tree has invalid setup this might be null | 
					
						
							|  |  |  |     if debugger_tab == null: | 
					
						
							|  |  |  |         return false | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if message == "beehave:register_tree": | 
					
						
							|  |  |  |         debugger_tab.register_tree(data[0]) | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     if message == "beehave:unregister_tree": | 
					
						
							|  |  |  |         debugger_tab.unregister_tree(data[0]) | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     if message == "beehave:process_tick": | 
					
						
							|  |  |  |         debugger_tab.graph.process_tick(data[0], data[1]) | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     if message == "beehave:process_begin": | 
					
						
							|  |  |  |         debugger_tab.graph.process_begin(data[0]) | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     if message == "beehave:process_end": | 
					
						
							|  |  |  |         debugger_tab.graph.process_end(data[0]) | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     return false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _setup_session(session_id: int) -> void: | 
					
						
							|  |  |  |     session = get_session(session_id) | 
					
						
							|  |  |  |     session.started.connect(debugger_tab.start) | 
					
						
							|  |  |  |     session.stopped.connect(debugger_tab.stop) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     debugger_tab.name = "🐝 Beehave" | 
					
						
							|  |  |  |     debugger_tab.make_floating.connect(_on_make_floating) | 
					
						
							|  |  |  |     debugger_tab.session = session | 
					
						
							|  |  |  |     session.add_session_tab(debugger_tab) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_make_floating() -> void: | 
					
						
							|  |  |  |     var plugin := BeehaveUtils.get_plugin() | 
					
						
							|  |  |  |     if not plugin: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |     if floating_window: | 
					
						
							|  |  |  |         _on_window_close_requested() | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var border_size := Vector2(4, 4) * BeehaveUtils.get_editor_scale() | 
					
						
							|  |  |  |     var editor_interface: EditorInterface = plugin.get_editor_interface() | 
					
						
							|  |  |  |     var editor_main_screen = editor_interface.get_editor_main_screen() | 
					
						
							|  |  |  |     debugger_tab.get_parent().remove_child(debugger_tab) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     floating_window = Window.new() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var panel := Panel.new() | 
					
						
							|  |  |  |     panel.add_theme_stylebox_override("panel", editor_interface.get_base_control().get_theme_stylebox("PanelForeground", "EditorStyles")) | 
					
						
							|  |  |  |     panel.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) | 
					
						
							|  |  |  |     floating_window.add_child(panel) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var margin := MarginContainer.new() | 
					
						
							|  |  |  |     margin.add_child(debugger_tab) | 
					
						
							|  |  |  |     margin.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) | 
					
						
							|  |  |  |     margin.add_theme_constant_override("margin_right", border_size.x) | 
					
						
							|  |  |  |     margin.add_theme_constant_override("margin_left", border_size.x) | 
					
						
							|  |  |  |     margin.add_theme_constant_override("margin_top", border_size.y) | 
					
						
							|  |  |  |     margin.add_theme_constant_override("margin_bottom", border_size.y) | 
					
						
							|  |  |  |     panel.add_child(margin) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     floating_window.title = "🐝 Beehave" | 
					
						
							|  |  |  |     floating_window.wrap_controls = true | 
					
						
							|  |  |  |     floating_window.min_size = Vector2i(600, 350) | 
					
						
							|  |  |  |     floating_window.size = debugger_tab.size | 
					
						
							|  |  |  |     floating_window.position = editor_main_screen.global_position | 
					
						
							|  |  |  |     floating_window.transient = true | 
					
						
							|  |  |  |     floating_window.close_requested.connect(_on_window_close_requested) | 
					
						
							|  |  |  |     editor_interface.get_base_control().add_child(floating_window) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_window_close_requested() -> void: | 
					
						
							|  |  |  |     debugger_tab.get_parent().remove_child(debugger_tab) | 
					
						
							|  |  |  |     session.add_session_tab(debugger_tab) | 
					
						
							|  |  |  |     floating_window.queue_free() | 
					
						
							|  |  |  |     floating_window = null |