Skip to content

Commit 1d4cedc

Browse files
committed
Rename Select Mode to Transform Mode, and create a new Select Mode without transform gizmo
1 parent da4f933 commit 1d4cedc

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

editor/plugins/node_3d_editor_plugin.cpp

+29-18
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
12771277

12781278
Transform3D gt = spatial_editor->get_gizmo_transform();
12791279

1280-
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE) {
1280+
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE) {
12811281
int col_axis = -1;
12821282
real_t col_d = 1e20;
12831283

@@ -1343,7 +1343,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
13431343
}
13441344
}
13451345

1346-
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE) {
1346+
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE) {
13471347
int col_axis = -1;
13481348

13491349
Vector3 hit_position;
@@ -1929,7 +1929,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19291929

19301930
bool node_selected = get_selected_count() > 0;
19311931

1932-
if (node_selected && ((spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT && b->is_command_or_control_pressed()) || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE)) {
1932+
if (node_selected && ((spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM && b->is_command_or_control_pressed()) || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE)) {
19331933
begin_transform(TRANSFORM_ROTATE, false);
19341934
break;
19351935
}
@@ -1950,7 +1950,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19501950

19511951
selection_in_progress = true;
19521952

1953-
if (clicked.is_null()) {
1953+
if (clicked.is_null() || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT) {
19541954
// Default to region select.
19551955
cursor.region_select = true;
19561956
cursor.region_begin = b->get_position();
@@ -1979,15 +1979,15 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19791979
if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
19801980
selection_in_progress = false;
19811981

1982-
if (clicked.is_valid()) {
1982+
if (clicked.is_valid() && !movement_threshold_passed) {
19831983
_select_clicked(false);
1984-
}
1985-
1986-
if (cursor.region_select) {
1984+
} else if (cursor.region_select) {
19871985
_select_region();
1988-
cursor.region_select = false;
19891986
surface->queue_redraw();
19901987
}
1988+
1989+
movement_threshold_passed = false;
1990+
cursor.region_select = false;
19911991
}
19921992

19931993
if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2097,7 +2097,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
20972097
if (change_nav_from_shortcut != NAVIGATION_NONE) {
20982098
nav_mode = change_nav_from_shortcut;
20992099
} else {
2100-
const bool movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE;
2100+
movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE;
21012101

21022102
if (selection_in_progress && movement_threshold_passed && clicked.is_valid()) {
21032103
if (clicked_wants_append || !editor_selection->is_selected(Object::cast_to<Node>(ObjectDB::get_instance(clicked)))) {
@@ -2113,7 +2113,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21132113
return;
21142114
}
21152115

2116-
if (clicked.is_valid() && movement_threshold_passed) {
2116+
if (clicked.is_valid() && movement_threshold_passed && spatial_editor->get_tool_mode() != Node3DEditor::TOOL_MODE_SELECT) {
21172117
_compute_edit(_edit.original_mouse_pos);
21182118
clicked = ObjectID();
21192119
_edit.mode = TRANSFORM_TRANSLATE;
@@ -3331,7 +3331,7 @@ void Node3DEditorViewport::_draw() {
33313331
get_theme_stylebox(SNAME("FocusViewport"), EditorStringName(EditorStyles))->draw(surface->get_canvas_item(), r);
33323332
}
33333333

3334-
if (cursor.region_select) {
3334+
if (cursor.region_select && movement_threshold_passed) {
33353335
const Rect2 selection_rect = Rect2(cursor.region_begin, cursor.region_end - cursor.region_begin);
33363336

33373337
surface->draw_rect(
@@ -4099,11 +4099,11 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
40994099
axis_angle.basis.scale(scale);
41004100
axis_angle.origin = xform.origin;
41014101
RenderingServer::get_singleton()->instance_set_transform(move_gizmo_instance[i], axis_angle);
4102-
RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE));
4102+
RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE));
41034103
RenderingServer::get_singleton()->instance_set_transform(move_plane_gizmo_instance[i], axis_angle);
4104-
RenderingServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE));
4104+
RenderingServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE));
41054105
RenderingServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[i], axis_angle);
4106-
RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE));
4106+
RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE));
41074107
RenderingServer::get_singleton()->instance_set_transform(scale_gizmo_instance[i], axis_angle);
41084108
RenderingServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE));
41094109
RenderingServer::get_singleton()->instance_set_transform(scale_plane_gizmo_instance[i], axis_angle);
@@ -4121,7 +4121,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
41214121
xform.orthonormalize();
41224122
xform.basis.scale(scale);
41234123
RenderingServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[3], xform);
4124-
RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[3], spatial_editor->is_gizmo_visible() && !_edit.instant && transform_gizmo_visible && !collision_reposition && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE));
4124+
RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[3], spatial_editor->is_gizmo_visible() && !_edit.instant && transform_gizmo_visible && !collision_reposition && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE));
41254125
}
41264126

41274127
void Node3DEditorViewport::set_state(const Dictionary &p_state) {
@@ -6746,6 +6746,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
67466746
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
67476747
switch (p_option) {
67486748
case MENU_TOOL_SELECT:
6749+
case MENU_TOOL_TRANSFORM:
67496750
case MENU_TOOL_MOVE:
67506751
case MENU_TOOL_ROTATE:
67516752
case MENU_TOOL_SCALE:
@@ -8131,6 +8132,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
81318132

81328133
void Node3DEditor::_update_theme() {
81338134
tool_button[TOOL_MODE_SELECT]->set_button_icon(get_editor_theme_icon(SNAME("ToolSelect")));
8135+
tool_button[TOOL_MODE_TRANSFORM]->set_button_icon(get_editor_theme_icon(SNAME("Generic6DOFJoint3D")));
81348136
tool_button[TOOL_MODE_MOVE]->set_button_icon(get_editor_theme_icon(SNAME("ToolMove")));
81358137
tool_button[TOOL_MODE_ROTATE]->set_button_icon(get_editor_theme_icon(SNAME("ToolRotate")));
81368138
tool_button[TOOL_MODE_SCALE]->set_button_icon(get_editor_theme_icon(SNAME("ToolScale")));
@@ -8816,11 +8818,20 @@ Node3DEditor::Node3DEditor() {
88168818
tool_button[TOOL_MODE_SELECT]->set_theme_type_variation(SceneStringName(FlatButton));
88178819
tool_button[TOOL_MODE_SELECT]->set_pressed(true);
88188820
tool_button[TOOL_MODE_SELECT]->connect(SceneStringName(pressed), callable_mp(this, &Node3DEditor::_menu_item_pressed).bind(MENU_TOOL_SELECT));
8819-
tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTRC("Select Mode"), Key::Q));
8821+
tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTRC("Select Mode"), Key::V));
88208822
tool_button[TOOL_MODE_SELECT]->set_shortcut_context(this);
8821-
tool_button[TOOL_MODE_SELECT]->set_tooltip_text(keycode_get_string((Key)KeyModifierMask::CMD_OR_CTRL) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked.") + "\n" + TTR("(Available in all modes.)"));
8823+
tool_button[TOOL_MODE_SELECT]->set_tooltip_text(TTR("Alt+RMB: Show list of all nodes at position clicked, including locked.") + "\n" + TTR("(Available in all modes.)"));
88228824
main_menu_hbox->add_child(memnew(VSeparator));
88238825

8826+
tool_button[TOOL_MODE_TRANSFORM] = memnew(Button);
8827+
main_menu_hbox->add_child(tool_button[TOOL_MODE_TRANSFORM]);
8828+
tool_button[TOOL_MODE_TRANSFORM]->set_toggle_mode(true);
8829+
tool_button[TOOL_MODE_TRANSFORM]->set_theme_type_variation(SceneStringName(FlatButton));
8830+
tool_button[TOOL_MODE_TRANSFORM]->connect(SceneStringName(pressed), callable_mp(this, &Node3DEditor::_menu_item_pressed).bind(MENU_TOOL_TRANSFORM));
8831+
tool_button[TOOL_MODE_TRANSFORM]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_transform", TTRC("Transform Mode"), Key::Q));
8832+
tool_button[TOOL_MODE_TRANSFORM]->set_shortcut_context(this);
8833+
tool_button[TOOL_MODE_TRANSFORM]->set_tooltip_text(keycode_get_string((Key)KeyModifierMask::CMD_OR_CTRL) + TTR("Drag: Rotate selected node around pivot.") + "\n" + TTR("Alt+RMB: Show list of all nodes at position clicked, including locked.") + "\n" + TTR("(Available in all modes.)"));
8834+
88248835
tool_button[TOOL_MODE_MOVE] = memnew(Button);
88258836
main_menu_hbox->add_child(tool_button[TOOL_MODE_MOVE]);
88268837
tool_button[TOOL_MODE_MOVE]->set_toggle_mode(true);

editor/plugins/node_3d_editor_plugin.h

+3
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ class Node3DEditorViewport : public Control {
333333
Vector<Node3D *> selection_results_menu;
334334
bool clicked_wants_append = false;
335335
bool selection_in_progress = false;
336+
bool movement_threshold_passed = false;
336337

337338
PopupMenu *selection_menu = nullptr;
338339

@@ -628,6 +629,7 @@ class Node3DEditor : public VBoxContainer {
628629

629630
enum ToolMode {
630631
TOOL_MODE_SELECT,
632+
TOOL_MODE_TRANSFORM,
631633
TOOL_MODE_MOVE,
632634
TOOL_MODE_ROTATE,
633635
TOOL_MODE_SCALE,
@@ -720,6 +722,7 @@ class Node3DEditor : public VBoxContainer {
720722

721723
enum MenuOption {
722724
MENU_TOOL_SELECT,
725+
MENU_TOOL_TRANSFORM,
723726
MENU_TOOL_MOVE,
724727
MENU_TOOL_ROTATE,
725728
MENU_TOOL_SCALE,

0 commit comments

Comments
 (0)