mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 09:16:35 +08:00
fix near infinite loop when no previous mouse position
Added physics_has_last_mousepos to better deal with situations where there is no last_mousepos
This commit is contained in:
parent
4b6e7b50b9
commit
ef9313f415
@ -435,7 +435,7 @@ void Viewport::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_mouse_motion) {
|
||||
if (!has_mouse_motion && physics_has_last_mousepos) {
|
||||
Ref<InputEventMouseMotion> mm;
|
||||
mm.instance();
|
||||
mm->set_global_position(physics_last_mousepos);
|
||||
@ -465,6 +465,7 @@ void Viewport::_notification(int p_what) {
|
||||
|
||||
pos = mm->get_position();
|
||||
motion_tested = true;
|
||||
physics_has_last_mousepos = true;
|
||||
physics_last_mousepos = pos;
|
||||
physics_last_mouse_state.alt = mm->get_alt();
|
||||
physics_last_mouse_state.shift = mm->get_shift();
|
||||
@ -643,7 +644,7 @@ void Viewport::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!motion_tested && camera && physics_last_mousepos != Vector2(1e20, 1e20)) {
|
||||
if (!motion_tested && camera && physics_has_last_mousepos) {
|
||||
|
||||
//test anyway for mouseenter/exit because objects might move
|
||||
Vector3 from = camera->project_ray_origin(physics_last_mousepos);
|
||||
@ -3105,7 +3106,8 @@ Viewport::Viewport() {
|
||||
physics_object_picking = false;
|
||||
physics_object_capture = 0;
|
||||
physics_object_over = 0;
|
||||
physics_last_mousepos = Vector2(1e20, 1e20);
|
||||
physics_has_last_mousepos = false;
|
||||
physics_last_mousepos = Vector2(Math_INF, Math_INF);
|
||||
|
||||
shadow_atlas_size = 0;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
@ -209,6 +209,7 @@ private:
|
||||
Transform physics_last_object_transform;
|
||||
Transform physics_last_camera_transform;
|
||||
ObjectID physics_last_id;
|
||||
bool physics_has_last_mousepos;
|
||||
Vector2 physics_last_mousepos;
|
||||
struct {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user