1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-11 13:10:58 +00:00

Fixed issues with 3D region-select in the editor

This commit is contained in:
Marcus Brummer
2022-02-10 00:24:52 +01:00
parent 8161e28512
commit 3c4c73b100
2 changed files with 17 additions and 11 deletions

View File

@@ -1595,9 +1595,9 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
} }
if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) { if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) {
clicked = _select_ray(b->get_position());
//clicking is always deferred to either move or release //clicking is always deferred to either move or release
clicked = _select_ray(b->get_position());
selection_in_progress = true;
if (clicked.is_null()) { if (clicked.is_null()) {
//default to regionselect //default to regionselect
@@ -1616,6 +1616,8 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
} }
if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) { if (after != EditorPlugin::AFTER_GUI_INPUT_DESELECT) {
selection_in_progress = false;
if (clicked.is_valid()) { if (clicked.is_valid()) {
_select_clicked(false); _select_clicked(false);
} }
@@ -1720,17 +1722,14 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
nav_mode = NAVIGATION_ORBIT; nav_mode = NAVIGATION_ORBIT;
} else { } else {
const bool movement_threshold_passed = _edit.original_mouse_pos.distance_to(_edit.mouse_pos) > 8 * EDSCALE; 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 // 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)) { if (selection_in_progress && movement_threshold_passed) {
cursor.region_select = true; if (get_selected_count() == 0 || clicked_wants_append) {
cursor.region_begin = _edit.original_mouse_pos; cursor.region_select = true;
cursor.region_begin = _edit.original_mouse_pos;
clicked = ObjectID();
}
} }
if (cursor.region_select) { if (cursor.region_select) {
@@ -1739,6 +1738,12 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
return; 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) { if (_edit.mode == TRANSFORM_NONE) {
return; return;
} }

View File

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