From 8a6804b1978dd036c95ba98ecf3ec5ba7b665433 Mon Sep 17 00:00:00 2001 From: Robert Yevdokimov <105675984+ryevdokimov@users.noreply.github.com> Date: Sat, 1 Feb 2025 16:30:48 +0400 Subject: [PATCH] Do not require editor restart when changing selection box color --- editor/editor_settings.cpp | 4 +- editor/plugins/node_3d_editor_plugin.cpp | 63 ++++++++++++++---------- editor/plugins/node_3d_editor_plugin.h | 5 ++ 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index db1d90cccc..43417ee344 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -788,8 +788,8 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { EDITOR_SETTING_BASIC(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/secondary_grid_color", Color(0.38, 0.38, 0.38, 0.5), "") // Use a similar color to the 2D editor selection. - EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/selection_box_color", Color(1.0, 0.5, 0), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) - EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/active_selection_box_color", Color(1.5, 0.75, 0, 1.0), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) + EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/selection_box_color", Color(1.0, 0.5, 0), "", PROPERTY_USAGE_DEFAULT) + EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d/active_selection_box_color", Color(1.5, 0.75, 0, 1.0), "", PROPERTY_USAGE_DEFAULT) EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/instantiated", Color(0.7, 0.7, 0.7, 0.6), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/joint", Color(0.5, 0.8, 1), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) EDITOR_SETTING_USAGE(Variant::COLOR, PROPERTY_HINT_NONE, "editors/3d_gizmos/gizmo_colors/aabb", Color(0.28, 0.8, 0.82), "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 98a0e2f9e1..05e8199c3e 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -6395,38 +6395,34 @@ void Node3DEditor::_generate_selection_boxes() { const Color selection_box_color = EDITOR_GET("editors/3d/selection_box_color"); const Color active_selection_box_color = EDITOR_GET("editors/3d/active_selection_box_color"); - Ref mat = memnew(StandardMaterial3D); - mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - mat->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); - mat->set_albedo(selection_box_color); - mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); - st->set_material(mat); + selection_box_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + selection_box_mat->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); + selection_box_mat->set_albedo(selection_box_color); + selection_box_mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + st->set_material(selection_box_mat); selection_box = st->commit(); - Ref mat_xray = memnew(StandardMaterial3D); - mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); - mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); - mat_xray->set_albedo(selection_box_color * Color(1, 1, 1, 0.15)); - mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); - st_xray->set_material(mat_xray); + selection_box_mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + selection_box_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); + selection_box_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); + selection_box_mat_xray->set_albedo(selection_box_color * Color(1, 1, 1, 0.15)); + selection_box_mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + st_xray->set_material(selection_box_mat_xray); selection_box_xray = st_xray->commit(); - Ref active_mat = memnew(StandardMaterial3D); - active_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - active_mat->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); - active_mat->set_albedo(active_selection_box_color); - active_mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); - active_st->set_material(active_mat); + active_selection_box_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + active_selection_box_mat->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); + active_selection_box_mat->set_albedo(active_selection_box_color); + active_selection_box_mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + active_st->set_material(active_selection_box_mat); active_selection_box = active_st->commit(); - Ref active_mat_xray = memnew(StandardMaterial3D); - active_mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - active_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); - active_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); - active_mat_xray->set_albedo(active_selection_box_color * Color(1, 1, 1, 0.15)); - active_mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); - active_st_xray->set_material(active_mat_xray); + active_selection_box_mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + active_selection_box_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_FOG, true); + active_selection_box_mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); + active_selection_box_mat_xray->set_albedo(active_selection_box_color * Color(1, 1, 1, 0.15)); + active_selection_box_mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + active_st_xray->set_material(active_selection_box_mat_xray); active_selection_box_xray = active_st_xray->commit(); } @@ -8282,8 +8278,21 @@ void Node3DEditor::_notification(int p_what) { } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - // Update grid color by rebuilding grid. if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/3d")) { + const Color selection_box_color = EDITOR_GET("editors/3d/selection_box_color"); + const Color active_selection_box_color = EDITOR_GET("editors/3d/active_selection_box_color"); + + if (selection_box_color != selection_box_mat->get_albedo()) { + selection_box_mat->set_albedo(selection_box_color); + selection_box_mat_xray->set_albedo(selection_box_color * Color(1, 1, 1, 0.15)); + } + + if (active_selection_box_color != active_selection_box_mat->get_albedo()) { + active_selection_box_mat->set_albedo(active_selection_box_color); + active_selection_box_mat_xray->set_albedo(active_selection_box_color * Color(1, 1, 1, 0.15)); + } + + // Update grid color by rebuilding grid. _finish_grid(); _init_grid(); } diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index dd28951a15..1e2d67cac7 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -698,6 +698,11 @@ private: Ref selection_box_xray; Ref selection_box; + Ref selection_box_mat = memnew(StandardMaterial3D); + Ref selection_box_mat_xray = memnew(StandardMaterial3D); + Ref active_selection_box_mat = memnew(StandardMaterial3D); + Ref active_selection_box_mat_xray = memnew(StandardMaterial3D); + RID indicators; RID indicators_instance; RID cursor_mesh;