129 lines
4.4 KiB
GDScript
129 lines
4.4 KiB
GDScript
class_name GECSEditorDebugger
|
|
extends EditorDebuggerPlugin
|
|
|
|
## The Debugger session for the current game
|
|
var session: EditorDebuggerSession
|
|
## The tab that will be added to the debugger window
|
|
var debugger_tab: GECSEditorDebuggerTab = preload("res://addons/gecs/debug/gecs_editor_debugger_tab.tscn").instantiate()
|
|
|
|
## The debugger messages that will be sent to the editor debugger
|
|
var Msg := GECSEditorDebuggerMessages.Msg
|
|
## Reference to editor interface for selecting nodes
|
|
var editor_interface: EditorInterface = null
|
|
|
|
|
|
func _has_capture(capture):
|
|
# Return true if you wish to handle messages with the prefix "gecs:".
|
|
return capture == "gecs"
|
|
|
|
|
|
func _capture(message: String, data: Array, session_id: int) -> bool:
|
|
if message == Msg.WORLD_INIT:
|
|
# data: [World.get_path()]
|
|
var world = data[0]
|
|
var world_path = data[1]
|
|
debugger_tab.world_init(data[0], data[1])
|
|
return true
|
|
elif message == Msg.SYSTEM_METRIC:
|
|
# data: [system, system_name, elapsed_time]
|
|
var system = data[0]
|
|
var system_name = data[1]
|
|
var elapsed_time = data[2]
|
|
debugger_tab.system_metric(system, system_name, elapsed_time)
|
|
return true
|
|
elif message == Msg.SYSTEM_LAST_RUN_DATA:
|
|
# data: [system_id, system_name, last_run_data]
|
|
var system_id = data[0]
|
|
var system_name = data[1]
|
|
var last_run_data = data[2]
|
|
debugger_tab.system_last_run_data(system_id, system_name, last_run_data)
|
|
return true
|
|
elif message == Msg.SET_WORLD:
|
|
if data.size() == 0:
|
|
return true
|
|
var world = data[0]
|
|
var world_path = data[1]
|
|
debugger_tab.set_world(world, world_path)
|
|
return true
|
|
elif message == Msg.PROCESS_WORLD:
|
|
# data: [float, String]
|
|
var delta = data[0]
|
|
var group_name = data[1]
|
|
debugger_tab.process_world(delta, group_name)
|
|
return true
|
|
elif message == Msg.EXIT_WORLD:
|
|
debugger_tab.exit_world()
|
|
return true
|
|
elif message == Msg.ENTITY_ADDED:
|
|
# data: [Entity, NodePath]
|
|
debugger_tab.entity_added(data[0], data[1])
|
|
return true
|
|
elif message == Msg.ENTITY_REMOVED:
|
|
# data: [Entity, NodePath]
|
|
debugger_tab.entity_removed(data[0], data[1])
|
|
return true
|
|
elif message == Msg.ENTITY_DISABLED:
|
|
# data: [Entity, NodePath]
|
|
debugger_tab.entity_disabled(data[0], data[1])
|
|
return true
|
|
elif message == Msg.ENTITY_ENABLED:
|
|
# data: [Entity, NodePath]
|
|
debugger_tab.entity_enabled(data[0], data[1])
|
|
return true
|
|
elif message == Msg.SYSTEM_ADDED:
|
|
# data: [System, group, process_empty, active, paused, NodePath]
|
|
debugger_tab.system_added(data[0], data[1], data[2], data[3], data[4], data[5])
|
|
return true
|
|
elif message == Msg.SYSTEM_REMOVED:
|
|
# data: [System, NodePath]
|
|
debugger_tab.system_removed(data[0], data[1])
|
|
return true
|
|
elif message == Msg.ENTITY_COMPONENT_ADDED:
|
|
# data: [ent.get_instance_id(), comp.get_instance_id(), ClassUtils.get_type_name(comp), comp.serialize()]
|
|
debugger_tab.entity_component_added(data[0], data[1], data[2], data[3])
|
|
return true
|
|
elif message == Msg.ENTITY_COMPONENT_REMOVED:
|
|
# data: [Entity, Variant]
|
|
debugger_tab.entity_component_removed(data[0], data[1])
|
|
return true
|
|
elif message == Msg.ENTITY_RELATIONSHIP_ADDED:
|
|
# data: [ent_id, rel_id, rel_data]
|
|
debugger_tab.entity_relationship_added(data[0], data[1], data[2])
|
|
return true
|
|
elif message == Msg.ENTITY_RELATIONSHIP_REMOVED:
|
|
# data: [Entity, Relationship]
|
|
debugger_tab.entity_relationship_removed(data[0], data[1])
|
|
return true
|
|
elif message == Msg.COMPONENT_PROPERTY_CHANGED:
|
|
# data: [Entity, Component, property_name, old_value, new_value]
|
|
debugger_tab.entity_component_property_changed(data[0], data[1], data[2], data[3], data[4])
|
|
return true
|
|
return false
|
|
|
|
|
|
func _setup_session(session_id):
|
|
# Add a new tab in the debugger session UI containing a label.
|
|
debugger_tab.name = "GECS" # Will be used as the tab title.
|
|
session = get_session(session_id)
|
|
# Pass session reference to the tab for sending messages
|
|
debugger_tab.set_debugger_session(session)
|
|
# Pass editor interface to the tab for selecting nodes
|
|
debugger_tab.set_editor_interface(editor_interface)
|
|
# Listens to the session started and stopped signals.
|
|
if not session.started.is_connected(_on_session_started):
|
|
session.started.connect(_on_session_started)
|
|
if not session.stopped.is_connected(_on_session_stopped):
|
|
session.stopped.connect(_on_session_stopped)
|
|
session.add_session_tab(debugger_tab)
|
|
|
|
|
|
func _on_session_started():
|
|
print("GECS Debug Session started")
|
|
debugger_tab.clear_all_data()
|
|
debugger_tab.active = true
|
|
|
|
|
|
func _on_session_stopped():
|
|
print("GECS Debug Session stopped")
|
|
debugger_tab.active = false
|