Merge pull request #24439 from staalduinen/mouse-motion-fix

fix near infinite loop when no previous mouse position
This commit is contained in:
Rémi Verschelde 2018-12-19 14:09:24 +01:00 committed by GitHub
commit a06f8ca6b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 3 deletions

View file

@ -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++) {

View file

@ -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 {