@@ -1277,7 +1277,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
1277
1277
1278
1278
Transform3D gt = spatial_editor->get_gizmo_transform ();
1279
1279
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) {
1281
1281
int col_axis = -1 ;
1282
1282
real_t col_d = 1e20 ;
1283
1283
@@ -1343,7 +1343,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
1343
1343
}
1344
1344
}
1345
1345
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) {
1347
1347
int col_axis = -1 ;
1348
1348
1349
1349
Vector3 hit_position;
@@ -1929,7 +1929,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1929
1929
1930
1930
bool node_selected = get_selected_count () > 0 ;
1931
1931
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)) {
1933
1933
begin_transform (TRANSFORM_ROTATE, false );
1934
1934
break ;
1935
1935
}
@@ -1950,7 +1950,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1950
1950
1951
1951
selection_in_progress = true ;
1952
1952
1953
- if (clicked.is_null ()) {
1953
+ if (clicked.is_null () || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT ) {
1954
1954
// Default to region select.
1955
1955
cursor.region_select = true ;
1956
1956
cursor.region_begin = b->get_position ();
@@ -1979,15 +1979,15 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
1979
1979
if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
1980
1980
selection_in_progress = false ;
1981
1981
1982
- if (clicked.is_valid ()) {
1982
+ if (clicked.is_valid () && !movement_threshold_passed ) {
1983
1983
_select_clicked (false );
1984
- }
1985
-
1986
- if (cursor.region_select ) {
1984
+ } else if (cursor.region_select ) {
1987
1985
_select_region ();
1988
- cursor.region_select = false ;
1989
1986
surface->queue_redraw ();
1990
1987
}
1988
+
1989
+ movement_threshold_passed = false ;
1990
+ cursor.region_select = false ;
1991
1991
}
1992
1992
1993
1993
if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2097,7 +2097,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
2097
2097
if (change_nav_from_shortcut != NAVIGATION_NONE) {
2098
2098
nav_mode = change_nav_from_shortcut;
2099
2099
} 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;
2101
2101
2102
2102
if (selection_in_progress && movement_threshold_passed && clicked.is_valid ()) {
2103
2103
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) {
2113
2113
return ;
2114
2114
}
2115
2115
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 ) {
2117
2117
_compute_edit (_edit.original_mouse_pos );
2118
2118
clicked = ObjectID ();
2119
2119
_edit.mode = TRANSFORM_TRANSLATE;
@@ -3331,7 +3331,7 @@ void Node3DEditorViewport::_draw() {
3331
3331
get_theme_stylebox (SNAME (" FocusViewport" ), EditorStringName (EditorStyles))->draw (surface->get_canvas_item (), r);
3332
3332
}
3333
3333
3334
- if (cursor.region_select ) {
3334
+ if (cursor.region_select && movement_threshold_passed ) {
3335
3335
const Rect2 selection_rect = Rect2 (cursor.region_begin , cursor.region_end - cursor.region_begin );
3336
3336
3337
3337
surface->draw_rect (
@@ -4099,11 +4099,11 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
4099
4099
axis_angle.basis .scale (scale);
4100
4100
axis_angle.origin = xform.origin ;
4101
4101
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));
4103
4103
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));
4105
4105
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));
4107
4107
RenderingServer::get_singleton ()->instance_set_transform (scale_gizmo_instance[i], axis_angle);
4108
4108
RenderingServer::get_singleton ()->instance_set_visible (scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SCALE));
4109
4109
RenderingServer::get_singleton ()->instance_set_transform (scale_plane_gizmo_instance[i], axis_angle);
@@ -4121,7 +4121,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
4121
4121
xform.orthonormalize ();
4122
4122
xform.basis .scale (scale);
4123
4123
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));
4125
4125
}
4126
4126
4127
4127
void Node3DEditorViewport::set_state (const Dictionary &p_state) {
@@ -6746,6 +6746,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
6746
6746
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton ();
6747
6747
switch (p_option) {
6748
6748
case MENU_TOOL_SELECT:
6749
+ case MENU_TOOL_TRANSFORM:
6749
6750
case MENU_TOOL_MOVE:
6750
6751
case MENU_TOOL_ROTATE:
6751
6752
case MENU_TOOL_SCALE:
@@ -8131,6 +8132,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
8131
8132
8132
8133
void Node3DEditor::_update_theme () {
8133
8134
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" )));
8134
8136
tool_button[TOOL_MODE_MOVE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolMove" )));
8135
8137
tool_button[TOOL_MODE_ROTATE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolRotate" )));
8136
8138
tool_button[TOOL_MODE_SCALE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolScale" )));
@@ -8816,11 +8818,20 @@ Node3DEditor::Node3DEditor() {
8816
8818
tool_button[TOOL_MODE_SELECT]->set_theme_type_variation (SceneStringName (FlatButton));
8817
8819
tool_button[TOOL_MODE_SELECT]->set_pressed (true );
8818
8820
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 ));
8820
8822
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.)" ));
8822
8824
main_menu_hbox->add_child (memnew (VSeparator));
8823
8825
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
+
8824
8835
tool_button[TOOL_MODE_MOVE] = memnew (Button );
8825
8836
main_menu_hbox->add_child (tool_button[TOOL_MODE_MOVE]);
8826
8837
tool_button[TOOL_MODE_MOVE]->set_toggle_mode (true );
0 commit comments