Skip to content

Commit 08aa465

Browse files
committed
Rename Select Mode to Transform Mode, and create a new Select Mode without transform gizmo
1 parent 7893202 commit 08aa465

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
@@ -1295,7 +1295,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
12951295

12961296
Transform3D gt = spatial_editor->get_gizmo_transform();
12971297

1298-
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE) {
1298+
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE) {
12991299
int col_axis = -1;
13001300
real_t col_d = 1e20;
13011301

@@ -1361,7 +1361,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
13611361
}
13621362
}
13631363

1364-
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE) {
1364+
if (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE) {
13651365
int col_axis = -1;
13661366

13671367
Vector3 hit_position;
@@ -1947,7 +1947,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19471947

19481948
bool node_selected = get_selected_count() > 0;
19491949

1950-
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)) {
1950+
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)) {
19511951
begin_transform(TRANSFORM_ROTATE, false);
19521952
break;
19531953
}
@@ -1968,7 +1968,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19681968

19691969
selection_in_progress = true;
19701970

1971-
if (clicked.is_null()) {
1971+
if (clicked.is_null() || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT) {
19721972
// Default to region select.
19731973
cursor.region_select = true;
19741974
cursor.region_begin = b->get_position();
@@ -1997,15 +1997,15 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19971997
if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
19981998
selection_in_progress = false;
19991999

2000-
if (clicked.is_valid()) {
2000+
if (clicked.is_valid() && !movement_threshold_passed) {
20012001
_select_clicked(false);
2002-
}
2003-
2004-
if (cursor.region_select) {
2002+
} else if (cursor.region_select) {
20052003
_select_region();
2006-
cursor.region_select = false;
20072004
surface->queue_redraw();
20082005
}
2006+
2007+
movement_threshold_passed = false;
2008+
cursor.region_select = false;
20092009
}
20102010

20112011
if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2115,7 +2115,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21152115
if (change_nav_from_shortcut != NAVIGATION_NONE) {
21162116
nav_mode = change_nav_from_shortcut;
21172117
} else {
2118-
const bool movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE;
2118+
movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE;
21192119

21202120
if (selection_in_progress && movement_threshold_passed && clicked.is_valid()) {
21212121
if (clicked_wants_append || !editor_selection->is_selected(Object::cast_to<Node>(ObjectDB::get_instance(clicked)))) {
@@ -2131,7 +2131,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21312131
return;
21322132
}
21332133

2134-
if (clicked.is_valid() && movement_threshold_passed) {
2134+
if (clicked.is_valid() && movement_threshold_passed && spatial_editor->get_tool_mode() != Node3DEditor::TOOL_MODE_SELECT) {
21352135
_compute_edit(_edit.original_mouse_pos);
21362136
clicked = ObjectID();
21372137
_edit.mode = TRANSFORM_TRANSLATE;
@@ -3349,7 +3349,7 @@ void Node3DEditorViewport::_draw() {
33493349
get_theme_stylebox(SNAME("FocusViewport"), EditorStringName(EditorStyles))->draw(surface->get_canvas_item(), r);
33503350
}
33513351

3352-
if (cursor.region_select) {
3352+
if (cursor.region_select && movement_threshold_passed) {
33533353
const Rect2 selection_rect = Rect2(cursor.region_begin, cursor.region_end - cursor.region_begin);
33543354

33553355
surface->draw_rect(
@@ -4117,11 +4117,11 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
41174117
axis_angle.basis.scale(scale);
41184118
axis_angle.origin = xform.origin;
41194119
RenderingServer::get_singleton()->instance_set_transform(move_gizmo_instance[i], axis_angle);
4120-
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));
4120+
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));
41214121
RenderingServer::get_singleton()->instance_set_transform(move_plane_gizmo_instance[i], axis_angle);
4122-
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));
4122+
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));
41234123
RenderingServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[i], axis_angle);
4124-
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));
4124+
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));
41254125
RenderingServer::get_singleton()->instance_set_transform(scale_gizmo_instance[i], axis_angle);
41264126
RenderingServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE));
41274127
RenderingServer::get_singleton()->instance_set_transform(scale_plane_gizmo_instance[i], axis_angle);
@@ -4139,7 +4139,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
41394139
xform.orthonormalize();
41404140
xform.basis.scale(scale);
41414141
RenderingServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[3], xform);
4142-
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));
4142+
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));
41434143
}
41444144

41454145
void Node3DEditorViewport::set_state(const Dictionary &p_state) {
@@ -6796,6 +6796,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
67966796
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
67976797
switch (p_option) {
67986798
case MENU_TOOL_SELECT:
6799+
case MENU_TOOL_TRANSFORM:
67996800
case MENU_TOOL_MOVE:
68006801
case MENU_TOOL_ROTATE:
68016802
case MENU_TOOL_SCALE:
@@ -8208,6 +8209,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
82088209

82098210
void Node3DEditor::_update_theme() {
82108211
tool_button[TOOL_MODE_SELECT]->set_button_icon(get_editor_theme_icon(SNAME("ToolSelect")));
8212+
tool_button[TOOL_MODE_TRANSFORM]->set_button_icon(get_editor_theme_icon(SNAME("Generic6DOFJoint3D")));
82118213
tool_button[TOOL_MODE_MOVE]->set_button_icon(get_editor_theme_icon(SNAME("ToolMove")));
82128214
tool_button[TOOL_MODE_ROTATE]->set_button_icon(get_editor_theme_icon(SNAME("ToolRotate")));
82138215
tool_button[TOOL_MODE_SCALE]->set_button_icon(get_editor_theme_icon(SNAME("ToolScale")));
@@ -8895,11 +8897,20 @@ Node3DEditor::Node3DEditor() {
88958897
tool_button[TOOL_MODE_SELECT]->set_theme_type_variation(SceneStringName(FlatButton));
88968898
tool_button[TOOL_MODE_SELECT]->set_pressed(true);
88978899
tool_button[TOOL_MODE_SELECT]->connect(SceneStringName(pressed), callable_mp(this, &Node3DEditor::_menu_item_pressed).bind(MENU_TOOL_SELECT));
8898-
tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTRC("Select Mode"), Key::Q, true));
8900+
tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTRC("Select Mode"), Key::V, true));
88998901
tool_button[TOOL_MODE_SELECT]->set_shortcut_context(this);
8900-
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.)"));
8902+
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.)"));
89018903
main_menu_hbox->add_child(memnew(VSeparator));
89028904

8905+
tool_button[TOOL_MODE_TRANSFORM] = memnew(Button);
8906+
main_menu_hbox->add_child(tool_button[TOOL_MODE_TRANSFORM]);
8907+
tool_button[TOOL_MODE_TRANSFORM]->set_toggle_mode(true);
8908+
tool_button[TOOL_MODE_TRANSFORM]->set_theme_type_variation(SceneStringName(FlatButton));
8909+
tool_button[TOOL_MODE_TRANSFORM]->connect(SceneStringName(pressed), callable_mp(this, &Node3DEditor::_menu_item_pressed).bind(MENU_TOOL_TRANSFORM));
8910+
tool_button[TOOL_MODE_TRANSFORM]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_transform", TTRC("Transform Mode"), Key::Q, true));
8911+
tool_button[TOOL_MODE_TRANSFORM]->set_shortcut_context(this);
8912+
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.)"));
8913+
89038914
tool_button[TOOL_MODE_MOVE] = memnew(Button);
89048915
main_menu_hbox->add_child(tool_button[TOOL_MODE_MOVE]);
89058916
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
@@ -332,6 +332,7 @@ class Node3DEditorViewport : public Control {
332332
Vector<Node3D *> selection_results_menu;
333333
bool clicked_wants_append = false;
334334
bool selection_in_progress = false;
335+
bool movement_threshold_passed = false;
335336

336337
PopupMenu *selection_menu = nullptr;
337338

@@ -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,
@@ -723,6 +725,7 @@ class Node3DEditor : public VBoxContainer {
723725

724726
enum MenuOption {
725727
MENU_TOOL_SELECT,
728+
MENU_TOOL_TRANSFORM,
726729
MENU_TOOL_MOVE,
727730
MENU_TOOL_ROTATE,
728731
MENU_TOOL_SCALE,

0 commit comments

Comments
 (0)