diff --git a/editor/debugger/editor_debugger_inspector.cpp b/editor/debugger/editor_debugger_inspector.cpp index 7e9e963bebc..121378a7560 100644 --- a/editor/debugger/editor_debugger_inspector.cpp +++ b/editor/debugger/editor_debugger_inspector.cpp @@ -271,7 +271,7 @@ EditorDebuggerRemoteObjects *EditorDebuggerInspector::set_objects(const Array &p remote_objects->prop_list.clear(); int new_props_added = 0; HashSet changed; - for (const KeyValue &KV : usage) { + for (KeyValue &KV : usage) { const PropertyInfo &pinfo = KV.value.prop.first; Variant var = KV.value.values[remote_objects->remote_object_ids[0]]; @@ -287,6 +287,7 @@ EditorDebuggerRemoteObjects *EditorDebuggerInspector::set_objects(const Array &p } } var = ResourceLoader::load(path); + KV.value.values[remote_objects->remote_object_ids[0]] = var; if (pinfo.hint_string == "Script") { if (remote_objects->get_script() != var) { diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index d63a8921696..04cf64265f9 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -116,6 +116,7 @@ ScriptEditorDebugger *EditorDebuggerNode::_add_debugger() { node->connect("remote_tree_updated", callable_mp(this, &EditorDebuggerNode::_remote_tree_updated).bind(id)); node->connect("remote_objects_updated", callable_mp(this, &EditorDebuggerNode::_remote_objects_updated).bind(id)); node->connect("remote_object_property_updated", callable_mp(this, &EditorDebuggerNode::_remote_object_property_updated).bind(id)); + node->connect("remote_objects_requested", callable_mp(this, &EditorDebuggerNode::_remote_objects_requested).bind(id)); node->connect("set_breakpoint", callable_mp(this, &EditorDebuggerNode::_breakpoint_set_in_tree).bind(id)); node->connect("clear_breakpoints", callable_mp(this, &EditorDebuggerNode::_breakpoints_cleared_in_tree).bind(id)); node->connect("errors_cleared", callable_mp(this, &EditorDebuggerNode::_update_errors)); @@ -679,8 +680,6 @@ void EditorDebuggerNode::request_remote_tree() { } void EditorDebuggerNode::set_remote_selection(const TypedArray &p_ids) { - remote_scene_tree->select_nodes(p_ids); - stop_waiting_inspection(); get_current_debugger()->request_remote_objects(p_ids); } diff --git a/editor/debugger/editor_expression_evaluator.cpp b/editor/debugger/editor_expression_evaluator.cpp index 369361cdbac..20bfbdd1caa 100644 --- a/editor/debugger/editor_expression_evaluator.cpp +++ b/editor/debugger/editor_expression_evaluator.cpp @@ -74,7 +74,9 @@ void EditorExpressionEvaluator::_clear() { } void EditorExpressionEvaluator::_remote_object_selected(ObjectID p_id) { - editor_debugger->emit_signal(SNAME("remote_object_requested"), p_id); + Array arr; + arr.append(p_id); + editor_debugger->emit_signal(SNAME("remote_objects_requested"), arr); } void EditorExpressionEvaluator::_on_expression_input_changed(const String &p_expression) { diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 1db15bcdced..5a10ada6149 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -300,7 +300,9 @@ void ScriptEditorDebugger::clear_inspector(bool p_send_msg) { } void ScriptEditorDebugger::_remote_object_selected(ObjectID p_id) { - emit_signal(SNAME("remote_object_requested"), p_id); + Array arr; + arr.append(p_id); + emit_signal(SNAME("remote_objects_requested"), arr); } void ScriptEditorDebugger::_remote_objects_edited(const String &p_prop, const TypedDictionary &p_values, const String &p_field) { @@ -439,16 +441,10 @@ void ScriptEditorDebugger::_msg_scene_scene_tree(uint64_t p_thread_id, const Arr void ScriptEditorDebugger::_msg_scene_inspect_objects(uint64_t p_thread_id, const Array &p_data) { ERR_FAIL_COND(p_data.is_empty()); + EditorDebuggerRemoteObjects *objs = inspector->set_objects(p_data); + if (objs && EditorDebuggerNode::get_singleton()->match_remote_selection(objs->remote_object_ids)) { + EditorDebuggerNode::get_singleton()->stop_waiting_inspection(); - TypedArray ids; - for (const Array arr : p_data) { - ERR_FAIL_COND(arr.is_empty()); - ERR_FAIL_COND(arr[0].get_type() != Variant::INT); - ids.append(arr[0]); - } - - if (EditorDebuggerNode::get_singleton()->match_remote_selection(ids)) { - EditorDebuggerRemoteObjects *objs = inspector->set_objects(p_data); emit_signal(SNAME("remote_objects_updated"), objs); } } @@ -881,7 +877,7 @@ void ScriptEditorDebugger::_msg_request_quit(uint64_t p_thread_id, const Array & _stop_and_notify(); } -void ScriptEditorDebugger::_msg_remote_nodes_clicked(uint64_t p_thread_id, const Array &p_data) { +void ScriptEditorDebugger::_msg_remote_objects_selected(uint64_t p_thread_id, const Array &p_data) { ERR_FAIL_COND(p_data.is_empty()); EditorDebuggerRemoteObjects *objs = inspector->set_objects(p_data); if (objs) { @@ -892,7 +888,7 @@ void ScriptEditorDebugger::_msg_remote_nodes_clicked(uint64_t p_thread_id, const } } -void ScriptEditorDebugger::_msg_remote_nothing_clicked(uint64_t p_thread_id, const Array &p_data) { +void ScriptEditorDebugger::_msg_remote_nothing_selected(uint64_t p_thread_id, const Array &p_data) { EditorDebuggerNode::get_singleton()->stop_waiting_inspection(); emit_signal(SNAME("remote_tree_clear_selection_requested")); @@ -973,8 +969,8 @@ void ScriptEditorDebugger::_init_parse_message_handlers() { parse_message_handlers["servers:profile_frame"] = &ScriptEditorDebugger::_msg_servers_profile_frame; parse_message_handlers["servers:profile_total"] = &ScriptEditorDebugger::_msg_servers_profile_total; parse_message_handlers["request_quit"] = &ScriptEditorDebugger::_msg_request_quit; - parse_message_handlers["remote_nodes_clicked"] = &ScriptEditorDebugger::_msg_remote_nodes_clicked; - parse_message_handlers["remote_nothing_clicked"] = &ScriptEditorDebugger::_msg_remote_nothing_clicked; + parse_message_handlers["remote_objects_selected"] = &ScriptEditorDebugger::_msg_remote_objects_selected; + parse_message_handlers["remote_nothing_selected"] = &ScriptEditorDebugger::_msg_remote_nothing_selected; parse_message_handlers["remote_selection_invalidated"] = &ScriptEditorDebugger::_msg_remote_selection_invalidated; parse_message_handlers["show_selection_limit_warning"] = &ScriptEditorDebugger::_msg_show_selection_limit_warning; parse_message_handlers["performance:profile_names"] = &ScriptEditorDebugger::_msg_performance_profile_names; @@ -1956,6 +1952,7 @@ void ScriptEditorDebugger::_bind_methods() { ADD_SIGNAL(MethodInfo("set_execution", PropertyInfo("script"), PropertyInfo(Variant::INT, "line"))); ADD_SIGNAL(MethodInfo("clear_execution", PropertyInfo("script"))); ADD_SIGNAL(MethodInfo("breaked", PropertyInfo(Variant::BOOL, "reallydid"), PropertyInfo(Variant::BOOL, "can_debug"), PropertyInfo(Variant::STRING, "reason"), PropertyInfo(Variant::BOOL, "has_stackdump"))); + ADD_SIGNAL(MethodInfo("remote_objects_requested", PropertyInfo(Variant::ARRAY, "ids"))); ADD_SIGNAL(MethodInfo("remote_objects_updated", PropertyInfo(Variant::OBJECT, "remote_objects"))); ADD_SIGNAL(MethodInfo("remote_object_property_updated", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::STRING, "property"))); ADD_SIGNAL(MethodInfo("remote_window_title_changed", PropertyInfo(Variant::STRING, "title"))); diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h index 852deaf00a8..ff736cd3ba2 100644 --- a/editor/debugger/script_editor_debugger.h +++ b/editor/debugger/script_editor_debugger.h @@ -217,8 +217,8 @@ private: void _msg_servers_profile_frame(uint64_t p_thread_id, const Array &p_data); void _msg_servers_profile_total(uint64_t p_thread_id, const Array &p_data); void _msg_request_quit(uint64_t p_thread_id, const Array &p_data); - void _msg_remote_nodes_clicked(uint64_t p_thread_id, const Array &p_data); - void _msg_remote_nothing_clicked(uint64_t p_thread_id, const Array &p_data); + void _msg_remote_objects_selected(uint64_t p_thread_id, const Array &p_data); + void _msg_remote_nothing_selected(uint64_t p_thread_id, const Array &p_data); void _msg_remote_selection_invalidated(uint64_t p_thread_id, const Array &p_data); void _msg_show_selection_limit_warning(uint64_t p_thread_id, const Array &p_data); void _msg_performance_profile_names(uint64_t p_thread_id, const Array &p_data); diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp index 3234239d826..5afcb8fd819 100644 --- a/scene/debugger/scene_debugger.cpp +++ b/scene/debugger/scene_debugger.cpp @@ -407,9 +407,9 @@ void SceneDebugger::_send_object_ids(const Vector &p_ids, bool p_updat arr.append(invalid_selection); EngineDebugger::get_singleton()->send_message("remote_selection_invalidated", arr); - EngineDebugger::get_singleton()->send_message(objs.is_empty() ? "remote_nothing_clicked" : "remote_nodes_clicked", objs); + EngineDebugger::get_singleton()->send_message(objs.is_empty() ? "remote_nothing_selected" : "remote_objects_selected", objs); } else { - EngineDebugger::get_singleton()->send_message("scene:inspect_objects", objs); + EngineDebugger::get_singleton()->send_message(p_update_selection ? "remote_objects_selected" : "scene:inspect_objects", objs); } } @@ -1652,7 +1652,7 @@ void RuntimeNodeSelect::_physics_frame() { #else if (!selected_ci_nodes.is_empty() || !selected_3d_nodes.is_empty()) { #endif // _3D_DISABLED - EngineDebugger::get_singleton()->send_message("remote_nothing_clicked", Array()); + EngineDebugger::get_singleton()->send_message("remote_nothing_selected", Array()); _clear_selection(); } @@ -1714,7 +1714,7 @@ void RuntimeNodeSelect::_send_ids(const Vector &p_picked_nodes, bool p_i message.append(arr); } - EngineDebugger::get_singleton()->send_message("remote_nodes_clicked", message); + EngineDebugger::get_singleton()->send_message("remote_objects_selected", message); _set_selected_nodes(picked_nodes); return; @@ -1778,7 +1778,7 @@ void RuntimeNodeSelect::_send_ids(const Vector &p_picked_nodes, bool p_i } if (ids.is_empty()) { - EngineDebugger::get_singleton()->send_message("remote_nothing_clicked", message); + EngineDebugger::get_singleton()->send_message("remote_nothing_selected", message); } else { for (const ObjectID &id : ids) { SceneDebuggerObject obj(id); @@ -1787,7 +1787,7 @@ void RuntimeNodeSelect::_send_ids(const Vector &p_picked_nodes, bool p_i message.append(arr); } - EngineDebugger::get_singleton()->send_message("remote_nodes_clicked", message); + EngineDebugger::get_singleton()->send_message("remote_objects_selected", message); } _set_selected_nodes(nodes);