1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Editor: Explicit parse_message handlers

Using custom macros for defining and registering message handlers hurts
readability and navigability.

This commit simplifies the ParseMessageFunc signature, expands the
macros, and streamlines initialization.
This commit is contained in:
Fabio Alessandrelli
2025-06-02 14:41:01 +02:00
parent e45cc68092
commit f36499f9c5
2 changed files with 165 additions and 184 deletions

View File

@@ -65,10 +65,6 @@ SceneDebugger::SceneDebugger() {
singleton = this;
#ifdef DEBUG_ENABLED
if (unlikely(parse_message_handlers.is_empty())) {
_init_parse_message_handlers();
}
LiveEditor::singleton = memnew(LiveEditor);
RuntimeNodeSelect::singleton = memnew(RuntimeNodeSelect);
@@ -95,6 +91,9 @@ SceneDebugger::~SceneDebugger() {
void SceneDebugger::initialize() {
if (EngineDebugger::is_active()) {
#ifdef DEBUG_ENABLED
_init_message_handlers();
#endif
memnew(SceneDebugger);
}
}
@@ -137,17 +136,17 @@ void SceneDebugger::_handle_embed_input(const Ref<InputEvent> &p_event, const Di
}
}
Error SceneDebugger::_msg_setup_scene(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
p_scene_tree->get_root()->connect(SceneStringName(window_input), callable_mp_static(SceneDebugger::_handle_input).bind(DebuggerMarshalls::deserialize_key_shortcut(p_args)));
Error SceneDebugger::_msg_setup_scene(const Array &p_args) {
SceneTree::get_singleton()->get_root()->connect(SceneStringName(window_input), callable_mp_static(SceneDebugger::_handle_input).bind(DebuggerMarshalls::deserialize_key_shortcut(p_args)));
return OK;
}
Error SceneDebugger::_msg_request_scene_tree(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
p_live_editor->_send_tree();
Error SceneDebugger::_msg_request_scene_tree(const Array &p_args) {
LiveEditor::get_singleton()->_send_tree();
return OK;
}
Error SceneDebugger::_msg_save_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_save_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
_save_node(p_args[0], p_args[1]);
Array arr;
@@ -156,7 +155,7 @@ Error SceneDebugger::_msg_save_node(const Array &p_args, SceneTree *p_scene_tree
return OK;
}
Error SceneDebugger::_msg_inspect_objects(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_inspect_objects(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
Vector<ObjectID> ids;
for (const Variant &id : (Array)p_args[0]) {
@@ -166,53 +165,53 @@ Error SceneDebugger::_msg_inspect_objects(const Array &p_args, SceneTree *p_scen
return OK;
}
Error SceneDebugger::_msg_clear_selection(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
p_runtime_node_select->_clear_selection();
Error SceneDebugger::_msg_clear_selection(const Array &p_args) {
RuntimeNodeSelect::get_singleton()->_clear_selection();
return OK;
}
Error SceneDebugger::_msg_suspend_changed(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_suspend_changed(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
bool suspended = p_args[0];
p_scene_tree->set_suspend(suspended);
p_runtime_node_select->_update_input_state();
SceneTree::get_singleton()->set_suspend(suspended);
RuntimeNodeSelect::get_singleton()->_update_input_state();
return OK;
}
Error SceneDebugger::_msg_next_frame(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_next_frame(const Array &p_args) {
_next_frame();
return OK;
}
Error SceneDebugger::_msg_debug_mute_audio(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_debug_mute_audio(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
bool do_mute = p_args[0];
AudioServer::get_singleton()->set_debug_mute(do_mute);
return OK;
}
Error SceneDebugger::_msg_override_cameras(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_override_cameras(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
bool enable = p_args[0];
bool from_editor = p_args[1];
p_scene_tree->get_root()->enable_canvas_transform_override(enable);
SceneTree::get_singleton()->get_root()->enable_canvas_transform_override(enable);
#ifndef _3D_DISABLED
p_scene_tree->get_root()->enable_camera_3d_override(enable);
SceneTree::get_singleton()->get_root()->enable_camera_3d_override(enable);
#endif // _3D_DISABLED
p_runtime_node_select->_set_camera_override_enabled(enable && !from_editor);
RuntimeNodeSelect::get_singleton()->_set_camera_override_enabled(enable && !from_editor);
return OK;
}
Error SceneDebugger::_msg_transform_camera_2d(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_transform_camera_2d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
Transform2D transform = p_args[0];
p_scene_tree->get_root()->set_canvas_transform_override(transform);
p_runtime_node_select->_queue_selection_update();
SceneTree::get_singleton()->get_root()->set_canvas_transform_override(transform);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#ifndef _3D_DISABLED
Error SceneDebugger::_msg_transform_camera_3d(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_transform_camera_3d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 5, ERR_INVALID_DATA);
Transform3D transform = p_args[0];
bool is_perspective = p_args[1];
@@ -220,38 +219,38 @@ Error SceneDebugger::_msg_transform_camera_3d(const Array &p_args, SceneTree *p_
float depth_near = p_args[3];
float depth_far = p_args[4];
if (is_perspective) {
p_scene_tree->get_root()->set_camera_3d_override_perspective(size_or_fov, depth_near, depth_far);
SceneTree::get_singleton()->get_root()->set_camera_3d_override_perspective(size_or_fov, depth_near, depth_far);
} else {
p_scene_tree->get_root()->set_camera_3d_override_orthogonal(size_or_fov, depth_near, depth_far);
SceneTree::get_singleton()->get_root()->set_camera_3d_override_orthogonal(size_or_fov, depth_near, depth_far);
}
p_scene_tree->get_root()->set_camera_3d_override_transform(transform);
p_runtime_node_select->_queue_selection_update();
SceneTree::get_singleton()->get_root()->set_camera_3d_override_transform(transform);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#endif // _3D_DISABLED
Error SceneDebugger::_msg_set_object_property(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_set_object_property(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
_set_object_property(p_args[0], p_args[1], p_args[2]);
p_runtime_node_select->_queue_selection_update();
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
Error SceneDebugger::_msg_set_object_property_field(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_set_object_property_field(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 4, ERR_INVALID_DATA);
_set_object_property(p_args[0], p_args[1], p_args[2], p_args[3]);
p_runtime_node_select->_queue_selection_update();
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
Error SceneDebugger::_msg_reload_cached_files(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_reload_cached_files(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
PackedStringArray files = p_args[0];
reload_cached_files(files);
return OK;
}
Error SceneDebugger::_msg_setup_embedded_shortcuts(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_setup_embedded_shortcuts(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty() || p_args[0].get_type() != Variant::DICTIONARY, ERR_INVALID_DATA);
Dictionary dict = p_args[0];
LocalVector<Variant> keys = dict.get_key_list();
@@ -266,49 +265,49 @@ Error SceneDebugger::_msg_setup_embedded_shortcuts(const Array &p_args, SceneTre
// region Live editing.
Error SceneDebugger::_msg_live_set_root(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_set_root(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
p_live_editor->_root_func(p_args[0], p_args[1]);
LiveEditor::get_singleton()->_root_func(p_args[0], p_args[1]);
return OK;
}
Error SceneDebugger::_msg_live_node_path(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_node_path(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
p_live_editor->_node_path_func(p_args[0], p_args[1]);
LiveEditor::get_singleton()->_node_path_func(p_args[0], p_args[1]);
return OK;
}
Error SceneDebugger::_msg_live_res_path(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_res_path(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
p_live_editor->_res_path_func(p_args[0], p_args[1]);
LiveEditor::get_singleton()->_res_path_func(p_args[0], p_args[1]);
return OK;
}
Error SceneDebugger::_msg_live_node_prop_res(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_node_prop_res(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_node_set_res_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_node_set_res_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_node_prop(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_node_prop(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_node_set_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_node_set_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_res_prop_res(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_res_prop_res(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_res_set_res_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_res_set_res_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_res_prop(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_res_prop(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_res_set_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_res_set_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_node_call(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_node_call(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
LocalVector<Variant> args;
LocalVector<Variant *> argptrs;
@@ -318,11 +317,11 @@ Error SceneDebugger::_msg_live_node_call(const Array &p_args, SceneTree *p_scene
args[i] = p_args[i + 2];
argptrs[i] = &args[i];
}
p_live_editor->_node_call_func(p_args[0], p_args[1], argptrs.size() ? (const Variant **)argptrs.ptr() : nullptr, argptrs.size());
LiveEditor::get_singleton()->_node_call_func(p_args[0], p_args[1], argptrs.size() ? (const Variant **)argptrs.ptr() : nullptr, argptrs.size());
return OK;
}
Error SceneDebugger::_msg_live_res_call(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_res_call(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
LocalVector<Variant> args;
LocalVector<Variant *> argptrs;
@@ -332,51 +331,51 @@ Error SceneDebugger::_msg_live_res_call(const Array &p_args, SceneTree *p_scene_
args[i] = p_args[i + 2];
argptrs[i] = &args[i];
}
p_live_editor->_res_call_func(p_args[0], p_args[1], argptrs.size() ? (const Variant **)argptrs.ptr() : nullptr, argptrs.size());
LiveEditor::get_singleton()->_res_call_func(p_args[0], p_args[1], argptrs.size() ? (const Variant **)argptrs.ptr() : nullptr, argptrs.size());
return OK;
}
Error SceneDebugger::_msg_live_create_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_create_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_create_node_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_create_node_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_instantiate_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_instantiate_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_instance_node_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_instance_node_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_remove_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_remove_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
p_live_editor->_remove_node_func(p_args[0]);
p_runtime_node_select->_queue_selection_update();
LiveEditor::get_singleton()->_remove_node_func(p_args[0]);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
Error SceneDebugger::_msg_live_remove_and_keep_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_remove_and_keep_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
p_live_editor->_remove_and_keep_node_func(p_args[0], p_args[1]);
p_runtime_node_select->_queue_selection_update();
LiveEditor::get_singleton()->_remove_and_keep_node_func(p_args[0], p_args[1]);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
Error SceneDebugger::_msg_live_restore_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_restore_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
p_live_editor->_restore_node_func(p_args[0], p_args[1], p_args[2]);
LiveEditor::get_singleton()->_restore_node_func(p_args[0], p_args[1], p_args[2]);
return OK;
}
Error SceneDebugger::_msg_live_duplicate_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_duplicate_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 2, ERR_INVALID_DATA);
p_live_editor->_duplicate_node_func(p_args[0], p_args[1]);
LiveEditor::get_singleton()->_duplicate_node_func(p_args[0], p_args[1]);
return OK;
}
Error SceneDebugger::_msg_live_reparent_node(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_live_reparent_node(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 4, ERR_INVALID_DATA);
p_live_editor->_reparent_node_func(p_args[0], p_args[1], p_args[2], p_args[3]);
LiveEditor::get_singleton()->_reparent_node_func(p_args[0], p_args[1], p_args[2], p_args[3]);
return OK;
}
@@ -384,65 +383,57 @@ Error SceneDebugger::_msg_live_reparent_node(const Array &p_args, SceneTree *p_s
// region Runtime Node Selection.
Error SceneDebugger::_msg_runtime_node_select_setup(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_runtime_node_select_setup(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty() || p_args[0].get_type() != Variant::DICTIONARY, ERR_INVALID_DATA);
p_runtime_node_select->_setup(p_args[0]);
RuntimeNodeSelect::get_singleton()->_setup(p_args[0]);
return OK;
}
Error SceneDebugger::_msg_runtime_node_select_set_type(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_runtime_node_select_set_type(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
RuntimeNodeSelect::NodeType type = (RuntimeNodeSelect::NodeType)(int)p_args[0];
p_runtime_node_select->_node_set_type(type);
RuntimeNodeSelect::get_singleton()->_node_set_type(type);
return OK;
}
Error SceneDebugger::_msg_runtime_node_select_set_mode(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_runtime_node_select_set_mode(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
RuntimeNodeSelect::SelectMode mode = (RuntimeNodeSelect::SelectMode)(int)p_args[0];
p_runtime_node_select->_select_set_mode(mode);
RuntimeNodeSelect::get_singleton()->_select_set_mode(mode);
return OK;
}
Error SceneDebugger::_msg_runtime_node_select_set_visible(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
Error SceneDebugger::_msg_runtime_node_select_set_visible(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
bool visible = p_args[0];
p_runtime_node_select->_set_selection_visible(visible);
RuntimeNodeSelect::get_singleton()->_set_selection_visible(visible);
return OK;
}
Error SceneDebugger::_msg_runtime_node_select_reset_camera_2d(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
p_runtime_node_select->_reset_camera_2d();
Error SceneDebugger::_msg_runtime_node_select_reset_camera_2d(const Array &p_args) {
RuntimeNodeSelect::get_singleton()->_reset_camera_2d();
return OK;
}
#ifndef _3D_DISABLED
Error SceneDebugger::_msg_runtime_node_select_reset_camera_3d(const Array &p_args, SceneTree *p_scene_tree, LiveEditor *p_live_editor, RuntimeNodeSelect *p_runtime_node_select) {
p_runtime_node_select->_reset_camera_3d();
Error SceneDebugger::_msg_runtime_node_select_reset_camera_3d(const Array &p_args) {
RuntimeNodeSelect::get_singleton()->_reset_camera_3d();
return OK;
}
#endif // _3D_DISABLED
// endregion
HashMap<String, SceneDebugger::ParseMessageFunc> SceneDebugger::message_handlers;
Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured) {
SceneTree *scene_tree = SceneTree::get_singleton();
if (!scene_tree) {
return ERR_UNCONFIGURED;
}
ERR_FAIL_NULL_V(SceneTree::get_singleton(), ERR_UNCONFIGURED);
ERR_FAIL_NULL_V(LiveEditor::get_singleton(), ERR_UNCONFIGURED);
ERR_FAIL_NULL_V(RuntimeNodeSelect::get_singleton(), ERR_UNCONFIGURED);
LiveEditor *live_editor = LiveEditor::get_singleton();
if (!live_editor) {
return ERR_UNCONFIGURED;
}
RuntimeNodeSelect *runtime_node_select = RuntimeNodeSelect::get_singleton();
if (!runtime_node_select) {
return ERR_UNCONFIGURED;
}
ParseMessageFunc *fn_ptr = parse_message_handlers.getptr(p_msg);
ParseMessageFunc *fn_ptr = message_handlers.getptr(p_msg);
if (fn_ptr) {
r_captured = true;
return (*fn_ptr)(p_args, scene_tree, live_editor, runtime_node_select);
return (*fn_ptr)(p_args);
}
if (p_msg.begins_with("live_") || p_msg.begins_with("runtime_node_select_")) {
@@ -457,54 +448,48 @@ Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Arra
return OK;
}
HashMap<String, SceneDebugger::ParseMessageFunc> SceneDebugger::parse_message_handlers;
void SceneDebugger::_init_parse_message_handlers() {
#define HANDLER(name) parse_message_handlers[#name] = _msg_##name
HANDLER(setup_scene);
HANDLER(setup_embedded_shortcuts);
HANDLER(request_scene_tree);
HANDLER(save_node);
HANDLER(inspect_objects);
HANDLER(clear_selection);
HANDLER(suspend_changed);
HANDLER(next_frame);
HANDLER(debug_mute_audio);
HANDLER(override_cameras);
HANDLER(transform_camera_2d);
void SceneDebugger::_init_message_handlers() {
message_handlers["setup_scene"] = _msg_setup_scene;
message_handlers["setup_embedded_shortcuts"] = _msg_setup_embedded_shortcuts;
message_handlers["request_scene_tree"] = _msg_request_scene_tree;
message_handlers["save_node"] = _msg_save_node;
message_handlers["inspect_objects"] = _msg_inspect_objects;
message_handlers["clear_selection"] = _msg_clear_selection;
message_handlers["suspend_changed"] = _msg_suspend_changed;
message_handlers["next_frame"] = _msg_next_frame;
message_handlers["debug_mute_audio"] = _msg_debug_mute_audio;
message_handlers["override_cameras"] = _msg_override_cameras;
message_handlers["transform_camera_2d"] = _msg_transform_camera_2d;
#ifndef _3D_DISABLED
HANDLER(transform_camera_3d);
message_handlers["transform_camera_3d"] = _msg_transform_camera_3d;
#endif
HANDLER(set_object_property);
HANDLER(set_object_property_field);
HANDLER(reload_cached_files);
HANDLER(live_set_root);
HANDLER(live_node_path);
HANDLER(live_res_path);
HANDLER(live_node_prop_res);
HANDLER(live_node_prop);
HANDLER(live_res_prop_res);
HANDLER(live_res_prop);
HANDLER(live_node_call);
HANDLER(live_res_call);
HANDLER(live_create_node);
HANDLER(live_instantiate_node);
HANDLER(live_remove_node);
HANDLER(live_remove_and_keep_node);
HANDLER(live_restore_node);
HANDLER(live_duplicate_node);
HANDLER(live_reparent_node);
HANDLER(runtime_node_select_setup);
HANDLER(runtime_node_select_set_type);
HANDLER(runtime_node_select_set_mode);
HANDLER(runtime_node_select_set_visible);
HANDLER(runtime_node_select_reset_camera_2d);
message_handlers["set_object_property"] = _msg_set_object_property;
message_handlers["set_object_property_field"] = _msg_set_object_property_field;
message_handlers["reload_cached_files"] = _msg_reload_cached_files;
message_handlers["live_set_root"] = _msg_live_set_root;
message_handlers["live_node_path"] = _msg_live_node_path;
message_handlers["live_res_path"] = _msg_live_res_path;
message_handlers["live_node_prop_res"] = _msg_live_node_prop_res;
message_handlers["live_node_prop"] = _msg_live_node_prop;
message_handlers["live_res_prop_res"] = _msg_live_res_prop_res;
message_handlers["live_res_prop"] = _msg_live_res_prop;
message_handlers["live_node_call"] = _msg_live_node_call;
message_handlers["live_res_call"] = _msg_live_res_call;
message_handlers["live_create_node"] = _msg_live_create_node;
message_handlers["live_instantiate_node"] = _msg_live_instantiate_node;
message_handlers["live_remove_node"] = _msg_live_remove_node;
message_handlers["live_remove_and_keep_node"] = _msg_live_remove_and_keep_node;
message_handlers["live_restore_node"] = _msg_live_restore_node;
message_handlers["live_duplicate_node"] = _msg_live_duplicate_node;
message_handlers["live_reparent_node"] = _msg_live_reparent_node;
message_handlers["runtime_node_select_setup"] = _msg_runtime_node_select_setup;
message_handlers["runtime_node_select_set_type"] = _msg_runtime_node_select_set_type;
message_handlers["runtime_node_select_set_mode"] = _msg_runtime_node_select_set_mode;
message_handlers["runtime_node_select_set_visible"] = _msg_runtime_node_select_set_visible;
message_handlers["runtime_node_select_reset_camera_2d"] = _msg_runtime_node_select_reset_camera_2d;
#ifndef _3D_DISABLED
HANDLER(runtime_node_select_reset_camera_3d);
message_handlers["runtime_node_select_reset_camera_3d"] = _msg_runtime_node_select_reset_camera_3d;
#endif
#undef HANDLER
}
void SceneDebugger::_save_node(ObjectID id, const String &p_path) {