@@ -1295,7 +1295,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
1295
1295
1296
1296
Transform3D gt = spatial_editor->get_gizmo_transform ();
1297
1297
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) {
1299
1299
int col_axis = -1 ;
1300
1300
real_t col_d = 1e20 ;
1301
1301
@@ -1361,7 +1361,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
1361
1361
}
1362
1362
}
1363
1363
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) {
1365
1365
int col_axis = -1 ;
1366
1366
1367
1367
Vector3 hit_position;
@@ -1947,7 +1947,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1947
1947
1948
1948
bool node_selected = get_selected_count () > 0 ;
1949
1949
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)) {
1951
1951
begin_transform (TRANSFORM_ROTATE, false );
1952
1952
break ;
1953
1953
}
@@ -1968,7 +1968,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1968
1968
1969
1969
selection_in_progress = true ;
1970
1970
1971
- if (clicked.is_null ()) {
1971
+ if (clicked.is_null () || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT ) {
1972
1972
// Default to region select.
1973
1973
cursor.region_select = true ;
1974
1974
cursor.region_begin = b->get_position ();
@@ -1997,15 +1997,15 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1997
1997
if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
1998
1998
selection_in_progress = false ;
1999
1999
2000
- if (clicked.is_valid ()) {
2000
+ if (clicked.is_valid () && !movement_threshold_passed ) {
2001
2001
_select_clicked (false );
2002
- }
2003
-
2004
- if (cursor.region_select ) {
2002
+ } else if (cursor.region_select ) {
2005
2003
_select_region ();
2006
- cursor.region_select = false ;
2007
2004
surface->queue_redraw ();
2008
2005
}
2006
+
2007
+ movement_threshold_passed = false ;
2008
+ cursor.region_select = false ;
2009
2009
}
2010
2010
2011
2011
if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2115,7 +2115,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
2115
2115
if (change_nav_from_shortcut != NAVIGATION_NONE) {
2116
2116
nav_mode = change_nav_from_shortcut;
2117
2117
} 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;
2119
2119
2120
2120
if (selection_in_progress && movement_threshold_passed && clicked.is_valid ()) {
2121
2121
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) {
2131
2131
return ;
2132
2132
}
2133
2133
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 ) {
2135
2135
_compute_edit (_edit.original_mouse_pos );
2136
2136
clicked = ObjectID ();
2137
2137
_edit.mode = TRANSFORM_TRANSLATE;
@@ -3349,7 +3349,7 @@ void Node3DEditorViewport::_draw() {
3349
3349
get_theme_stylebox (SNAME (" FocusViewport" ), EditorStringName (EditorStyles))->draw (surface->get_canvas_item (), r);
3350
3350
}
3351
3351
3352
- if (cursor.region_select ) {
3352
+ if (cursor.region_select && movement_threshold_passed ) {
3353
3353
const Rect2 selection_rect = Rect2 (cursor.region_begin , cursor.region_end - cursor.region_begin );
3354
3354
3355
3355
surface->draw_rect (
@@ -4117,11 +4117,11 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
4117
4117
axis_angle.basis .scale (scale);
4118
4118
axis_angle.origin = xform.origin ;
4119
4119
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));
4121
4121
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));
4123
4123
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));
4125
4125
RenderingServer::get_singleton ()->instance_set_transform (scale_gizmo_instance[i], axis_angle);
4126
4126
RenderingServer::get_singleton ()->instance_set_visible (scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SCALE));
4127
4127
RenderingServer::get_singleton ()->instance_set_transform (scale_plane_gizmo_instance[i], axis_angle);
@@ -4139,7 +4139,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
4139
4139
xform.orthonormalize ();
4140
4140
xform.basis .scale (scale);
4141
4141
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));
4143
4143
}
4144
4144
4145
4145
void Node3DEditorViewport::set_state (const Dictionary &p_state) {
@@ -6796,6 +6796,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
6796
6796
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton ();
6797
6797
switch (p_option) {
6798
6798
case MENU_TOOL_SELECT:
6799
+ case MENU_TOOL_TRANSFORM:
6799
6800
case MENU_TOOL_MOVE:
6800
6801
case MENU_TOOL_ROTATE:
6801
6802
case MENU_TOOL_SCALE:
@@ -8208,6 +8209,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
8208
8209
8209
8210
void Node3DEditor::_update_theme () {
8210
8211
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" )));
8211
8213
tool_button[TOOL_MODE_MOVE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolMove" )));
8212
8214
tool_button[TOOL_MODE_ROTATE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolRotate" )));
8213
8215
tool_button[TOOL_MODE_SCALE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolScale" )));
@@ -8895,11 +8897,20 @@ Node3DEditor::Node3DEditor() {
8895
8897
tool_button[TOOL_MODE_SELECT]->set_theme_type_variation (SceneStringName (FlatButton));
8896
8898
tool_button[TOOL_MODE_SELECT]->set_pressed (true );
8897
8899
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 ));
8899
8901
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.)" ));
8901
8903
main_menu_hbox->add_child (memnew (VSeparator));
8902
8904
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
+
8903
8914
tool_button[TOOL_MODE_MOVE] = memnew (Button );
8904
8915
main_menu_hbox->add_child (tool_button[TOOL_MODE_MOVE]);
8905
8916
tool_button[TOOL_MODE_MOVE]->set_toggle_mode (true );
0 commit comments