Browse Source

Merge pull request #57919 from mbrlabs/region-select-fixes

Fixed issues with 3D region-select in the editor
JFonS 3 years ago
parent
commit
3aa7b7eaf2
2 changed files with 17 additions and 11 deletions
  1. 16 11
      editor/plugins/node_3d_editor_plugin.cpp
  2. 1 0
      editor/plugins/node_3d_editor_plugin.h

+ 16 - 11
editor/plugins/node_3d_editor_plugin.cpp

@@ -1594,9 +1594,9 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
 					}
 
 					if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) {
-						clicked = _select_ray(b->get_position());
-
 						//clicking is always deferred to either move or release
+						clicked = _select_ray(b->get_position());
+						selection_in_progress = true;
 
 						if (clicked.is_null()) {
 							//default to regionselect
@@ -1615,6 +1615,8 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
 					}
 
 					if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) {
+						selection_in_progress = false;
+
 						if (clicked.is_valid()) {
 							_select_clicked(false);
 						}
@@ -1719,17 +1721,14 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
 				nav_mode = NAVIGATION_ORBIT;
 			} else {
 				const bool movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE;
-				if (clicked.is_valid() && movement_threshold_passed) {
-					_compute_edit(_edit.original_mouse_pos);
-					clicked = ObjectID();
-
-					_edit.mode = TRANSFORM_TRANSLATE;
-				}
 
 				// enable region-select if nothing has been selected yet or multi-select (shift key) is active
-				if (movement_threshold_passed && (get_selected_count() == 0 || clicked_wants_append)) {
-					cursor.region_select = true;
-					cursor.region_begin = _edit.original_mouse_pos;
+				if (selection_in_progress && movement_threshold_passed) {
+					if (get_selected_count() == 0 || clicked_wants_append) {
+						cursor.region_select = true;
+						cursor.region_begin = _edit.original_mouse_pos;
+						clicked = ObjectID();
+					}
 				}
 
 				if (cursor.region_select) {
@@ -1738,6 +1737,12 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
 					return;
 				}
 
+				if (clicked.is_valid() && movement_threshold_passed) {
+					_compute_edit(_edit.original_mouse_pos);
+					clicked = ObjectID();
+					_edit.mode = TRANSFORM_TRANSLATE;
+				}
+
 				if (_edit.mode == TRANSFORM_NONE) {
 					return;
 				}

+ 1 - 0
editor/plugins/node_3d_editor_plugin.h

@@ -269,6 +269,7 @@ private:
 	ObjectID clicked;
 	Vector<_RayResult> selection_results;
 	bool clicked_wants_append;
+	bool selection_in_progress = false;
 
 	PopupMenu *selection_menu;