|
@@ -51,7 +51,6 @@
|
|
#include "scene/gui/subviewport_container.h"
|
|
#include "scene/gui/subviewport_container.h"
|
|
#include "scene/resources/packed_scene.h"
|
|
#include "scene/resources/packed_scene.h"
|
|
#include "scene/resources/surface_tool.h"
|
|
#include "scene/resources/surface_tool.h"
|
|
-#include "servers/display_server.h"
|
|
|
|
|
|
|
|
#define DISTANCE_DEFAULT 4
|
|
#define DISTANCE_DEFAULT 4
|
|
|
|
|
|
@@ -196,12 +195,20 @@ void ViewportRotationControl::_gui_input(Ref<InputEvent> p_event) {
|
|
_update_focus();
|
|
_update_focus();
|
|
}
|
|
}
|
|
orbiting = false;
|
|
orbiting = false;
|
|
|
|
+ if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_CAPTURED) {
|
|
|
|
+ Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
|
|
|
|
+ Input::get_singleton()->warp_mouse_position(orbiting_mouse_start);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
const Ref<InputEventMouseMotion> mm = p_event;
|
|
const Ref<InputEventMouseMotion> mm = p_event;
|
|
if (mm.is_valid()) {
|
|
if (mm.is_valid()) {
|
|
if (orbiting) {
|
|
if (orbiting) {
|
|
|
|
+ if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_VISIBLE) {
|
|
|
|
+ Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
|
|
|
|
+ orbiting_mouse_start = mm->get_global_position();
|
|
|
|
+ }
|
|
viewport->_nav_orbit(mm, viewport->_get_warped_mouse_motion(mm));
|
|
viewport->_nav_orbit(mm, viewport->_get_warped_mouse_motion(mm));
|
|
focused_axis = -1;
|
|
focused_axis = -1;
|
|
} else {
|
|
} else {
|
|
@@ -2210,14 +2217,14 @@ void Node3DEditorViewport::set_freelook_active(bool active_now) {
|
|
}
|
|
}
|
|
|
|
|
|
// Hide mouse like in an FPS (warping doesn't work)
|
|
// Hide mouse like in an FPS (warping doesn't work)
|
|
- DisplayServer::get_singleton()->mouse_set_mode(DisplayServer::MOUSE_MODE_CAPTURED);
|
|
|
|
|
|
+ Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
|
|
|
|
|
|
} else if (freelook_active && !active_now) {
|
|
} else if (freelook_active && !active_now) {
|
|
// Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential
|
|
// Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential
|
|
cursor = camera_cursor;
|
|
cursor = camera_cursor;
|
|
|
|
|
|
// Restore mouse
|
|
// Restore mouse
|
|
- DisplayServer::get_singleton()->mouse_set_mode(DisplayServer::MOUSE_MODE_VISIBLE);
|
|
|
|
|
|
+ Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
|
|
}
|
|
}
|
|
|
|
|
|
freelook_active = active_now;
|
|
freelook_active = active_now;
|